使用TS+Sequelize实现更简洁的CRUD

 如果是经常使用Node来做服务端开发的童鞋,肯定不可避免的会操作数据库,做一些增删改查(CRUDCreate Read Update Delete)的操作,如果是一些简单的操作,类似定时脚本什么的,可能就直接生写SQL语句来实现功能了,而如果是在一些大型项目中,数十张、上百张的表,之间还会有一些(一对多,多对多)的映射关系,那么引入一个ORMObject Relational Mapping)工具来帮助我们与数据库打交道就可以减轻一部分不必要的工作量,Sequelize就是其中比较受欢迎的一个。

CRUD原始版 手动拼接SQL

先来举例说明一下直接拼接SQL语句这样比较“底层”的操作方式:

CREATE TABLE animal (   id INT AUTO_INCREMENT,   name VARCHAR(14) NOT NULL,   weight INT NOT NULL,    PRIMARY KEY (`id`) );

创建这样的一张表,三个字段,自增ID、name以及weight
如果使用mysql这个包来直接操作数据库大概是这样的:

const connection = mysql.createConnection({}) const tableName = 'animal'  connection.connect()  // 我们假设已经支持了Promise  // 查询 const [results] = await connection.query(`   SELECT      id,     name,     weight   FROM ${tableName} `)  // 新增 const name = 'Niko' const weight = 70 await connection.query(`   INSERT INTO ${tableName} (name, weight)   VALUES ('${name}', ${weight}) `) // 或者通过传入一个Object的方式也可以做到 await connection.query(`INSERT INTO ${tableName} SET ?`, {   name,   weight })  connection.end()

看起来也还算是比较清晰,但是这样带来的问题就是,开发人员需要对表结构足够的了解。
如果表中有十几个字段,对于开发人员来说这会是很大的记忆成本,你需要知道某个字段是什么类型,拼接SQL时还要注意插入时的顺序及类型,WHERE条件对应的查询参数类型,如果修改某个字段的类型,还要去处理对应的传参。
这样的项目尤其是在进行交接的时候更是一件恐怖的事情,新人又需要从头学习这些表结构。
以及还有一个问题,如果有哪天需要更换数据库了,放弃了MySQL,那么所有的SQL语句都要进行修改(因为各个数据库的方言可能有区别)

CRUD进阶版 Sequelize的使用

关于记忆这件事情,机器肯定会比人脑更靠谱儿,所以就有了ORM,这里就用到了在Node中比较流行的Sequelize

ORM是干嘛的

首先可能需要解释下ORM是做什么使的,可以简单地理解为,使用面向对象的方式,通过操作对象来实现与数据库之前的交流,完成

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信