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。

ORM选型对比的更多相关文章

  1. 各种ORM框架对比(理论篇,欢迎来观摩)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  2. 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  3. MQ选型对比RabbitMQ RocketMQ ActiveMQ

    原文:MQ选型对比RabbitMQ RocketMQ ActiveMQ 几种MQ产品说明:     ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装 ...

  4. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

  5. Net环境下比较流行的ORM框架对比

    个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使 ...

  6. 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)

    转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...

  7. uni-app,wex5,APPcan,ApiCloud几款国内webapp开发框架的选型对比

    框架列表. https://www.cnblogs.com/xiaxiaxia/articles/5705557.html 前言 近期,要开一个新的项目,APP类型.最重要的需求就是能够随时调整APP ...

  8. 为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

    原文:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...

  9. MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?

    最近研究消息队列,发现好几个框架,搜罗一下进行对比,说一下选型说明: 1)中小型软件公司,建议选RabbitMQ.一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便.不考虑r ...

随机推荐

  1. 12 个强大的 Chrome 插件扩展

    Chrome功能强大,也得益于其拥有丰富的扩展资源库.Chrome Web Store里有各种各样的插件,可以满足你使用Chrome时的各种要求.和Firefox一样,Chrome的扩展非常容易安装, ...

  2. 上传文件,经过Zuul,中文文件名乱码解决办法

    转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...

  3. iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用

    [iOS开发]iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的 ...

  4. ABAP术语-Connection Type

    Connection Type 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/17/1042479.html A connection ty ...

  5. Linux运维一定要知道的六类好习惯和23个教训,避免入坑!

    Linux运维一定要知道的六类好习惯和23个教训,避免入坑! 从事运维三年半,遇到过各式各样的问题,数据丢失,网站挂马,误删数据库文件,黑客攻击等各类问题. 今天简单整理一下,分享给各位小伙伴. 一. ...

  6. [Git add . ] 遇到The file will have its original line endings in your working directory 解决办法

    1.在新项目中使用[ git add . ]时出现: warning: LF will be replaced by CRLF in ...... The file will have its ori ...

  7. InheritableThreadLocal线程复用

    引自:http://www.cnblogs.com/sweetchildomine/p/6575666.html 虽然使用AOP可以获取方法签名,但是如果要获取方法中计算得出的数据,那么就得使用Thr ...

  8. Windows之cmd指令

    gpedit.msc-----本地计算机策略sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff------- ...

  9. bean工具类

    package com.zq.utils; import java.lang.reflect.Method;import java.util.Arrays;import java.util.Colle ...

  10. redis之cluster(集群)

    搭建redis cluster 1. 准备节点 2. 节点间的通信 3. 分配槽位给节点 redis-cluster架构 多个服务端,负责读写,彼此通信,redis指定了16384个槽. 多匹马儿,负 ...