egg-mysql 比较适合于中小型业务需求,对于比较复杂的业务需求:
- 分页
- 多表联查
- ….
Sequelize 是一种 ORM框架。
ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式
安装
配置
plugin.js
exports.sequelize = {
enable: true,
package: 'egg-sequelize',
};
config.default.js
config.sequelize = {
dialect: 'mysql',
host: '127.0.0.1',
port: '3306',
user: 'root',
password: '0000mysql',
database: 'egg',
define: {
timestamps: false,
freezeTableName: true,
},
};
使用
在 sequelize 中,每个表都当作一个模型,然后 可以对其一些属性进行设置,并且在 model 文件夹中的操作文件也最好与表名一致
app/model/user.js
'use strict';
module.exports = app => {
const { STRING, INTEGER } = app.Sequelize;
// 参数:1.表名称(模型名称) 2.表字段
const User = app.model.define('user', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: STRING(20),
pwd: STRING(50),
});
return User;
};
const { STRING, INTEGER } = app.Sequelize;
字段typeapp.model.define
参数 : 1.表名称(模型名称) 2.表字段
查
controller/user.js
const res = await ctx.model.User.findAll({
where: { id: 1 },
});
引用 ctx.model.User
User 就是刚刚暴露的对象,其中有findAll
方法,如果其中没有参数,就是选择表中全部数据;如果有参数:参数接收一个对象
{
where: { id: 1 }, // 选择条件
limit: 2, // 分页:每一页限制一条数据
offset: 0, // 偏移量
}
只查单条数据ctx.model.User.findByPk()
const res = await ctx.model.User.findByPk(ctx.params.id);
ctx.body = res;
增
const res = await ctx.model.User.create(ctx.request.body);
改
// 先判断该id是否存在
const user = await ctx.model.User.findByPk(
ctx.request.body.id
);
if (!user) {
ctx.body = { status: 404, errMsg: 'id not finded' };
return;
}
const res = user.update(ctx.request.body);
ctx.body = { status: 200, data: res };
删
const user = await ctx.model.User.findByPk(
ctx.request.body.id
);
if (!user) {
ctx.body = { status: 404, errMsg: 'id not finded' };
return;
}
const res = user.destroy(ctx.request.body.id);
ctx.body = { status: 200, data: res };