![b150a3ede2b20e6dbd7ecbc0942041f5.png](https://img-blog.csdnimg.cn/img_convert/b150a3ede2b20e6dbd7ecbc0942041f5.png)
Sequelize.js是一个用于Node.js的数据库ORM库,支持Postgres、MySQL/MariaDB、SQLite、SQL Server等引擎。
本文记录一些团队在使用Sequelize过程中积累的经验教训。
介绍
ORM即Object Relational Mapping,中文叫“对象关系映射”。简单地说就是可以将数据库的各种对象(表、字段)及关系映射为程序语言的对象和关系,从而使开发者不需要直接操作数据库,转而操作对象即可。
例如,将表user
映射为模型User
后,从数据库中查询id
为1
的用户就可以直接调用findOne()
方法:
const user = await User.findOne({
where: {
id: 1
}
});
这样做会带来几个明显的好处:
- 难度开发难度:ORM都有完善的文档,几乎所有的操作只需要按文档调用指定方法即可,不需要自己拼接SQL
- 提升安全性:ORM会处理好SQL注入问题,不需要开发者关注
- 降低封装复杂度:公共逻辑可以基于ORM封装,非常方便
下文不区分“模型”和“Model”,均指Sequelize中与数据表对应的数据模型。
命名
团队合作中统一大家的命名规则是很重要的事情,因此一般稍微规范一些的团队都会有比较详尽的命名规范。但是不同地方的命名规则却不一定完全一致,例如:
- 数据库规范:表名及字段名使用小写字母,单词间以下划线分隔
- JS编码规范:变量命名使用驼峰式命名(即首字母小写,后续单词的首字母大写)
这种情况可以通过Sequelize模型定义来解决,直接指定表名和字段名即可:
sequelize.define('targetInfo', {
targetId: {
type: DataTypes.INTEGER(11),
allowNull: true,
field: 'target_id',
},
}, {
tableName: 'target_info',
});
上例中的target_id
字段,在使用Sequelize的Model时就可以使用