一 什么是ORM?
1.ORM是对象关系映射,ORM框架即对象关系映射框架,使用ORM可以免去我们写SQL语句的烦恼,可以直接通过操作模型对象进行增删改查,让开发人员更加注重于业务的实现,告别SQL语句。总之优点多多,大家自行百度。
2.以下操作均在Koa2项目的根目录终端下进行操作
二 Sequelize
1.Node.js中的ORM框架,首当其冲的便是Sequelize, 这是npmjs上的地址Sequelize。
2.官方网站是英文的,不过幸亏有中文网,大家可自行阅读Sequelize中文网
三 Sequelize准备工作
1.进入之前的测试项目,安装Sequelize,Mysql,及Sequelize工具
npm i sequelize -S //安装Sequelize
npm i mysql2 -S //安装mysql2
npm i sequelize-cli -g //sequelize-cli 注意Sequelize-cli是全局安装
2.全部安装完成之后,使用Sequelize-cli初始化项目
sequelize init
运行该命令时如果抛出以下错误:
这是因为powershell并非管理员身份运行,使用一下命令修改策略组,再次运行即可
set-ExecutionPolicy RemoteSigned
sequelize init
出现一下内容,则说明Sequelize初始化项目成功,这是我们可以看到项目文件夹中多了几个文件。
其中,config文件夹以及文件夹里的config.js用于配置数据库的相关信息,
migrations,存储的是迁移文件,用于数据库及数据库表的更新,注意,这里更新的是数据库,而不是数据。
models,存储模型文件。
seeders,存储种子文件,用于向数据库表添加测试数据。
四 Sequelize创建数据库,数据表,测试数据
1.想要操作数据库,首先得配置数据库,首先在config文件夹中的config.js配置数据库相关连接内容,默认内容如下。
development为开发环境,
test为测试环境
production为生产环境
我们在开发环境的节点中配置我们的数据库。
"development": {
"username": "root", //用户名
"password": "123456", //用户密码
"database": "koa2test", //数据库
"host": "127.0.0.1", //数据库地址
"dialect": "mysql" //数据库类型,这里的数据库支持多种数据库,我们使用mysql
}
这里的koa2test数据可以不是已经存在的数据库,我们可以使用Sequelize命令去创建它。
sequelize db:create --charset 'utf8' //charset 后边可以设置数据库的字符集格式
执行完成之后,可以看到数据库已经被创建,打开数据库管理工具,例如Navicat Premium,可以看到名为koa2test的数据库数据库已经存在,且字符集也是我们设置的utf8
如果发生错误,请检查项目配置环境或电脑自身的mysql环境是否正常。
2.创建数据库表,模型以及迁移文件
我们先来创建一个SystemManager 的数据表,默认添加一个string类型的字段,account
sequelize model:generate --name system_manager --attributes account:string
这时,Sequelize会自动创建一个迁移文件,和一个model文件。
打开迁移文件,可以看到迁移文件中已经默认为我们添加了id,createAt,updateAt这三个字段,我们手动编写的account字段也在其中。在这个文件中,我们可以根据自动生成的代码去修改迁移文件,毕竟,在命令行中编写完全部字段还是很麻烦的。
现在来运行迁移文件
sequelize db:migrate
打开数据库,可以看到表和字段都已经被创建
注意:这里的模型和数据表的区别,创建表时会自动为表名加上s,即模型为system_manager,数据库的表名为system_managers
五 创建测试数据,种子文件
sequelize seed:generate --name system_manager //创建一个名为system_manager 的种子文件
运行完成之后,可以在seeders文件夹中看到多了一个文件,且内容如下
根据给出的示例,添加两条数据
全部代码如下,注意区别修改过的地方,尤其注意对模型名称的修改,注意这里要使用数据表的名字system_managers,而不是模型名称。
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
await queryInterface.bulkInsert('system_managers', [{
account: 'admin',
password: '123456',
name: "shawn",
phone: "18800000000",
age: 28,
role: "超级管理员",
createdAt: new Date(),
updatedAt: new Date()
},
{
account: 'test',
password: '123456',
name: "tony",
phone: "18800000001",
age: 23,
role: "系统测试员",
createdAt: new Date(),
updatedAt: new Date()
}], {});
},
down: async (queryInterface, Sequelize) => {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
await queryInterface.bulkDelete('system_managers', null, {});
}
};
完成之后,运行种子文件
sequelize db:seed:all
如果要单独运行指定的种子文件,则使用一下命令
sequelize db:seed --seed file_name //file_name是种子文件的名称
运行完成以后,查看数据表,可以看到,我们的测试数据已经添加到数据库中去了。
至此,我们已经使用Sequelize完成了创建数据库,数据表,模型,种子数字的操作,整个操作流程步骤如下:
后面的内容将开始讨论如何通过Sequelize对数据库进行增删改查操作。
总结
文章仅仅讲述了Sequelize的基本用法,其他更多用法,请参考官方网站。