Sequelize是什么?
Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
Sequelize 遵从 语义版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。
说简单点sequelize就是帮助我们操作数据库的一个ORM(Object–relational mapping,对象关系映射)框架,我们使用mysql2操作数据库,要使用各种原生的sql语句去操作,功能简单还好说,功能复杂庞大就会显得很麻烦,繁琐,毕竟要写大量的原生sql语句,sequelize的出现帮助我们只需要通过对象的方式就可以完成数据库表创建、设计、数据的CRUD操作,简化开发、提高效率。
中文文档:https://www.sequelize.com.cn/
安装
Sequelize 的使用可以通过 npm (或 yarn).
npm install --save sequelize
你还必须手动为所选数据库安装驱动程序:
# 选择以下之一:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
因为我们要操作的是mysql,所以这个地方我们选择mysql2。
连接到数据库
const Sequelize = require('sequelize');
// 创建Sequelize的实例对象并配置连接信息
const sequelize = new Sequelize({
host: '127.0.0.1',
username: 'root',
password: 'root',
database: 'todos',
dialect: 'mysql',
timezone: 'Asia/Shanghai' //当我们向数据库中写入时间的时候,默认会根据系统当前所在时区进行设置
})
// 测试连接
sequelize.authenticate().then(_=>{
console.log("数据库连接成功!");
}).catch(err=>{
console.log("数据库连接失败! ", err);
})
new Sequelize options:
host:主机,默认localhost
port:端口,默认3306
dialect:数据库类型,默认mysql,必填
timezone:时区,影响数据库日期时间格式的值,格式:+08:00 或 字符串格式
什么是模型?
用来表述(描述)数据库表字段信息的对象,每一个模型对象表示数据库中的一个表,后续对数据库的操作都是通过对应的模型对象来完成的。
模型对象
创建模型对象
public define(modelName: String, attributes: Object, options: Object): Model
- modelName:模型名称,自定义
- attributes:模型中包含的数据,每一个数据映射对应表中的每一个字段
- options:模型(表)的设置
/**
* 数据库连接完成以后,需要确定操作的表
* 使用ORM,不需要通过sql来操作表,而是通过对象来操作
* 给每一个要操作的表定义一个对象 - 模型 Model
*/
const UserModel = sequelize.define('User', {
// 描述表中对应的字段信息
// 对象的key默认对应这表的column字段
id: {
// 每一个字段的信息
type: Sequelize.INTEGER(10), // 整数类型
allowNull: false, // 不允许为空
primaryKey: true, // 设置为主键
autoIncrement: true // 允许自增
},
username: {
type: Sequelize.STRING(255),
allowNull: false,
defaultValue: 0
},
age: {
type: Sequelize.TINYINT,
allowNull: false,
defaultValue: 0
},
gender: {
type: Sequelize.ENUM(['男', '女', '默认']), // 注意枚举类型为数组
allowNull: false,
defaultValue: '男'
}
}, {
// 用来设置字段以外的其他信息
timestamps: false,
paranoid: false,
freezeTableName: true,
tableName: 'user',
indexes: [{
name: 'uname',
fields: ['username']
}, {
name: 'age',
fields: ['age']
}]
})
attributes 设置
attributes是一个对象,里面包含了对应的表中的字段信息,key表示字段名称,值是字段的具体描述。
字段值描述
type: 字段类型,String|DataTypes
allowNull: 是否允许为空,默认为true
defaultValue: 默认值,默认为null
unique: 值唯一,默认为false
primaryKey: 是否为主键,默认为false
field: 数据库中字段的实际名称
autoIncrement: 是否自增,默认false
get: 字段的getter,函数
set: 字段的setter,函数
validate: 对象,对当前字段值发生改变的时候进行验证
模型额外配置
timestamps:是否给每条记录添加 createdAt 和 updatedAt 字段,并在添加新数据和更新数据的时候自动设置这两个字段的值,默认为true
paranoid:设置 deletedAt 字段,当删除一条记录的时候,并不是真的销毁记录,而是通过该字段来标识,即保留数据,进行假删除,默认为false
freezeTableName:禁用修改表名; 默认情况下,sequelize将自动将所有传递的模型名称(define的第一个参数)转换为复数。 默认为false
tableName:手动设置表的实际名称
定义表的索引
indexes:Array