Objection.js 是 Node.js 的 ORM,它的目标是不妨碍你的工作,让你尽可能轻松地使用SQL和底层数据库引擎的全部功能,同时还能让你轻松愉快地使用常用功能。
尽管 ORM 是描述 objection 最常用的缩写,但更准确的描述是称其为关系查询生成器。它不仅拥有 SQL 查询生成器的所有优点,还拥有一套强大的关系处理工具。
Objection.js 基于名为 knex 的 SQL 查询生成器。objection.js 支持 knex 支持的所有数据库。SQLite3、Postgres 和 MySQL已通过全面测试(thoroughly tested)。
objection.js 能为你带来什么?
- 定义模型(defining models)和模型间关系的简单声明式方法
- 使用 SQL 的全部功能,以简单有趣的方式获取、插入、更新和删除(fetch, insert, update and delete)对象
- 强大的即时加载(eager loading)、插入(inserting)和上插(upserting)对象图机制
- 易于使用的事务(transactions)
- 正式支持 TypeScript
- 可选的 JSON 模式(JSON schema)验证
- 将复杂文档存储(store complex documents)为单行的方法
objection.js 无法为你提供的功能:
- 完全面向对象的数据库视图。使用 objection,你不用处理实体。而是查询。反对并不试图用面向对象的等价物来包装每一个概念。Hibernate 是做到这一点的最佳尝试(我认为),它非常出色,但它有80万行代码,需要学习的概念比 SQL 本身要多得多。关键是,编写一个优秀的传统 ORM 是一项艰巨的任务。Objection 试图提供一种完全不同的 SQL 工作方式。
- 自定义查询 DSL。SQL 是一种查询语言。但这并不意味着你必须编写 SQL 字符串。我们使用基于 knex 的查询生成器来构建 SQL。不过,如果查询生成器因某种原因失效,也可以使用原始辅助函数轻松编写原始(raw)SQL 字符串。
- 根据模型定义自动创建和迁移数据库模式。从模型定义中自动生成数据库模式对于简单的事情很有用,但通常在做一些非小事时会碍手碍脚。Objection.js 将与模式相关的工作留给了你。Knex 有一个很棒的迁移工具(migration tool),我们向你推荐它。请查看示例项目(example project)。
最好的入门方法就是克隆我们的示例项目(example project)并开始使用。我们还有一个 Typescript 版本(typescript version)。
查看本期内容(this issue),了解谁在使用 objection 以及他们的看法。
快捷方式:
- Who uses objection.js 谁在使用 objection.js
- API reference API 参考
- Example projects 示例项目
- Changelog 更新日志
- v1 -> v2 -> v3 migration guide v1 -> v2 -> v3 迁移指南
- Contribution guide 贡献指南
- Plugins 插件
(First edition: vz edited at 2024.11.24)