前言
安装
npm install --save egg-sequelize mysql2
配置
// config/plugin.ts
sequelize: {
enable: true,
package: 'egg-sequelize',
},
// config/config.defaullt.ts
config.sequelize = {
dialect: 'mysql', // 表示是mysql数据库
host: '127.0.0.1',
port: 3306,
database: 'test',
username: 'root',
password: '123456',
timezone: '+08:00', // 表示为东八区的时间
};
model 创建
// app/model/User.ts
import { Application } from 'egg';
export default function(app: Application) {
const { STRING, INTEGER, BIGINT } = app.Sequelize;
const User = app.model.define('users', {
id: {
type: INTEGER, // INTEGER就是mysql中的int
primaryKey: true,
autoIncrement: true, // 自动增长
},
app_name: STRING(20),
j: BIGINT,
url: STRING(100),
country: STRING(10),
}, {
// timestamps: false, // 去除createAt updateAt
createdAt: false, // 表示不启用created_at
updatedAt: false, // 表示不启用updated_at
freezeTableName: true, // 使用自定义表名
// 使用自定义表名之后上面写的users就直接就是你的表名,如果不加的话,你就可以写user,但是自己的表名为users,程序会自动将s加上
tableName: 'users', // 自定义的表名,也可以不写,直接用define后面的也可以
// 只要你使用了freezeTableName,程序就不会自动给你加上s了
});
return class extends User {};
}
命令
增加数据
const res = await ctx.model.User.create({
app_name: 'xxx',
j: 10,
url: 'http://xxx.com',
country: 'CN',
});
查找
查找表中全部数据
const res = await ctx.model.User.findAll();
投影表中部分字段
const res = await ctx.model.User.findAll({
attributes: [ 'id', 'app_name' ], // 投影id和app_name
});
条件查询
const res = await ctx.model.User.findAll({
attributes: [ 'id', 'app_name' ],
where: {
id: 2,
},
limit: 1, // 限制
offset: 1, // 偏移
});
根据主键查找
const res = await ctx.model.User.findByPk(1);
修改数据
const res = await ctx.model.User.findByPk(22);
res?.update({ app_name: 'xxx' });
查找到相应元组再更新数据
删除数据
const res = await ctx.model.User.findByPk(22);
res?.destroy();