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.UserUser 就是刚刚暴露的对象,其中有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 };
