egg+ts使用sequelize

前言

安装

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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。