ORM框架选型
ORM框架选型
jian A YEAR AGO (2017-04-10) orm, database
选型标准:实现O/R mapping,基于promise,支持原生SQL语句,支持连接池,支持事务,支持ES6/ES7。

name star createtime
persistencejs 1681 2010-01-31
sequelize 9354 2010-07-18
node-orm2 2384 2012-11-25
typeorm 1814 2016-02-21
bookshelf 4005 2013-03-10
waterline 3837 2012-11-25
mongoose 11936 2010-04-04
node-mysql 9030 2013-03-05
knex 4326 2012-12-23
备注:以上数据截止2017年4月8日

mongoose只支持mongodb,放弃;node-mysql与knex非ORM框架,放弃;persistencejs2016年以后未更新,放弃。

sequelize
https://github.com/sequelize/sequelize
文档齐全,star最多。

支持数据库:postgresql、mysql、sqlite和sqlserver

特性: 模型定义 模型同步、删除 1:1 1:m n:m 关联
穿透模型 promise
hooks/callbacks/lifecycle
支持原生SQL 连接池 事务 迁移 CLI

node-orm2
https://github.com/dresende/node-orm2
支持数据库: mysql & mariadb
postgresql
amazon redshift
sqlite
mongodb(beta版)

特性: 创建模型、同步、删除、批量新增、获取、查询、删除、统计、集合 创建模型关联 定制有效性验证 模型实例缓存 通过插件支持分页、事务、mysql全文搜索、迁移。 支持原生SQL语句。 连接池,可通过pool参数设置。 promise通过q-rom库实现。

项目近期更新少,与sequelize竞争完全处于劣势,放弃。

typeorm
https://github.com/typeorm/typeorm
采用TypeScript编写的基于node.js的ORM框架,支持使用TypeScript或javascript(ES5,ES6,ES7)开发。

支持数据库:mysql & mariadb、postgresql、sqlite、sqlserver和oracle

特性: 根据Models自动创建数据库表; 可以透明的insert/update/delete数据库对象; 映射数据库表到javascript对象,映射列到javascript对象属性; 提供表的一对一,多对一,一对多,多对多关系处理 支持连接池 支持事务

使用typescript实现,项目比较新,放弃。

bookshelf
https://github.com/tgriesser/bookshelf

bookshelf是基于knex的ORM框架。

支持数据库:mysql & mariadb、postgresql、sqlite3和Oracle

特性: 事务 连接池 流式查询 promise和callback API
原生SQL语句

waterline
https://github.com/balderdashy/waterline

waterline是从Sails框架衍生出来的ORM框架。

支持数据库:mysql、mongo、postgresql、redis等

文档包含在sail文档中:http://sailsjs.com/documentation/reference/waterline-orm 文档不完善,放弃。

最终对比
从以上分析,我们最终从sequelize和bookshelf两者之间做出选择。 项目数据对比: https://nodejs.libhunt.com/project/sequelize/vs/bookshelf?rel=cmp-cat

依赖于sequelize的项目: https://www.npmjs.com/browse/depended/sequelize
依赖于bookshelf的项目: https://www.npmjs.com/browse/depended/bookshelf

1W start以上项目依赖:
ghost项目使用bookshelf
react-starter-kit项目使用sequelize

两者文档都很全面。 sequelize的star数量和版本更新频率高于bookshelf,所以推荐使用Sequelize。