Sequelizes使用
# 前言
# 关于ORM框架
ORM框架主要作用是简化数据库编程,有如下几点:
- 提高开发效率:ORM框架提供了简单易用的API,从而不需要再写大量的SQL语句。
- 减少SQL注入攻击:ORM通过参数化查询方式,可以防止SQL注入攻击。
- 提高代码可读性:ORM框架将数据库表和实体类进行了映射,使代码可读性更高。
- 提高代码可移植性:使用ORM框架API操作数据库,屏蔽了不同数据库之间的操作差异,可移植性更高。
# 介绍
Sequelize (opens new window)是一个基于promise的Node.js ORM框架。
# 在egg.js中使用
1. 安装
npm install --save egg-sequelize mysql2
1
2. 在config/plugin.js
做配置
'use strict';
module.exports = {
sequelize: {
enable: true,
package: 'egg-sequelize',
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
3. 在config/config.default.js
做配置
// sequelize 配置
config.sequelize = {
username: 'root',
password: '',
database: 'database_name',
host: '127.0.0.1',
timezone: '+08:00', // 使用的时区为 UTC+8 时区
define: {
timestamps: false, // 表中不包含 createdAt 和 updatedAt 两个字段
freezeTableName: true, // 表示表名与模型名称完全匹配,即不添加任何前缀或后缀。
underscored: false // 不使用下划线作为单词之间的分隔符,而是使用驼峰式命名法(如:createdAt 而不是 created_at)。
},
dialectOptions: { // 让读取date类型数据时返回字符串而不是UTC时间
dateStrings: true,
typeCast(field, next) {
if(field.type === "DATETIME"){
return field.string();
}
return next();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
4.创建模型
// app/model/User.js
'use strict';
module.exports = app => {
const { STRING, DATE } = app.Sequelize;
const User = app.model.define('tb_user', {
user_id: {
type: STRING,
primaryKey: true,
allowNull: false,
field: 'user_id',
},
openid_mini: {
type: STRING,
field: 'openid_mini',
},
avatar: {
type: STRING,
field: 'avatar',
},
create_at: {
type: DATE,
field: 'create_at',
},
update_at: {
type: DATE,
field: 'update_at',
},
user_name: {
type: STRING,
field: 'user_name',
},
password: {
type: STRING,
field: 'password',
},
nick_name: {
type: STRING,
field: 'nick_name',
},
real_name: {
type: STRING,
field: 'real_name',
},
}, {
tableName: 'tb_user',
freezeTableName: true,
timestamps: false,
});
return User;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
5.在代码中进行使用
// app/service/auth.js
'use strict';
const Service = require('egg').Service;
class User extends Service {
/**
* @function 用户登录
* @param data {{user_name:string, password: string}} 入参
* */
async login(data) {
const { ctx, app } = this;
const user = await ctx.model.User.findOne({
where:data
})
}
}
module.exports = User;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 使用
编辑 (opens new window)
上次更新: 2023/04/23