浅谈MVC--Node中如何使用ORM?
Posted 程序猿周先森
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈MVC--Node中如何使用ORM?相关的知识,希望对你有一定的参考价值。
接收客户端的参数,建立数据库的连接。
根据功能组装sql语句,然后创建Statement对象。
使用Connection对象执行sql语句,得结果集ResultSet。
循环读取结果集的数据,然后根据数据进行业务逻辑处理。
如果还有进一步的需求,再组装新的sql语句进行执行。
执行结束关闭数据库连接。
可以看到上面业务逻辑和数据存取逻辑是紧密耦合在一起的,如果需要修改需求,那工作量则是成倍的增长。所以有必要将业务逻辑以及数据存取逻辑分离开来,所以产生了ORM这么一个对象与数据之间的映射技术。简单来说ORM就是通过实例对象的语法,完成对关系型数据库操作的技术,是对象-关系映射的缩写。而本篇文章主要介绍一个NodeJS环境下的ORM框架---Sequelize。
首先,我们基于脚手架快速搭建一个express项目,执行命令:
express testORM
npm install
项目已有目录routes下存放路由文件。
根目录下创建config.js,存放常量参数。
根目录下创建contonller文件夹,在contonller下创建db.js,里面封装Sequelize连接数据库的操作。
根目录下创建db文件夹,在contonller下创建pay_goods.js,里面定义数据类型,封装数据库存取的操作。
根目录下创建service文件夹,在service下创建pay_goods.js,里面对数据进行业务逻辑处理。
根目录下创建utils文件夹,用来存放全局方法。
所以我们生成的项目最终项目结构如下:
npm install --save-dev sequelize mysql2
然后进入contonller/db.js初始化数据库连接:
-
参数1 :表示映射的数据库表名 -
参数2: 对表中每一个对象进行数据类型定义。 -
参数3 :对选填参数配置
接下来进入utils/common.js实现一个获取客户端传参的全局方法:
上面就完成的实现了一个插入数据的API,我们不需要手动书写sql语句。而且将业务逻辑和数据存取逻辑完全独立。接下来我们可以再看几个查询语句:
-
findAll(): 查询多条数据,传入一个json对象,json对象中可以对查询条件进行限制,比如我示例代码中使用attributes传入要查询的数据列数组,使用where传入where条件语句的参数限制,使用limit和offset参数可以进行分页操作,使用order可以根据某个数据列操作等。 -
findByPk():通过id查询对应数据,id一般为主键,所以只会返回一条数据,而且参数只能传入id。 -
findOne():只能查询一条语句,一样可以指定findAll()中的各种条件,但是只会返回符合条件的第一条数据。
到这里我们对于Sequelize的基础操作就差不多了解了,接下来来看看Sequelize封装sql如何链式调用多个数据库操作,因为Sequelize是基于Promise的ORM框架,所以我们很简单的使用链式调用数据库读取操作实现多个数据库操作:
以上是关于浅谈MVC--Node中如何使用ORM?的主要内容,如果未能解决你的问题,请参考以下文章