Egg 使用 Sequelize

本文详细介绍如何使用Egg.js框架结合Sequelize ORM进行MySQL数据库的配置与操作,包括安装依赖、配置数据库连接、定义数据模型及使用操作符进行数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装sequelize依赖和mysql驱动

cnpm i egg-sequelize mysql2 -save

2.在config/plugin.js 下启用sequelize插件

sequelize:{
    enable:true,
    package:'egg-sequelize' 
}

3.在 config/config.default.js 配置数据库

config.sequelize = {
    dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
    database: 'test', //数据库名
    host: '127.0.0.1',
    port: '3306',
    username: 'root', //账号
    password: '123456', //密码
    timezone: '+08:00', // 保存为本地时区,mysql保存时会自动保存为UTC格式
    dialectOptions: {
        dateStrings: true,
        typeCast(field, next) {
            if (field.type === "DATETIME") {
            return field.string();
        }
            return next();
        }
    }
};

4.定义model , 在app/model 目录 下新建一个文件 test.js

module.exports = app => {
    const { STRING,INTEGER,DATE} = app.Sequelize;
    const Test = app.model.define('test',
    {
        id: {
            type: INTEGER,
            primaryKey: true
        },
        name:{
            type: STRING(50)
        },
        status:{
            type: INTEGER
        },
        create_time:{
            type: DATE
        }
    },
    {
        freezeTableName: true, // Model 对应的表名将与model名相同
        timestamps: false,
    }
    );
     
    Test.associate = function() {
        app.model.Test.hasMany(app.model.Test2, {foreignKey:'id',sourceKey:'test_id' });//一对多
        app.model.Test.belongsTo(app.model.Test3, {foreignKey:'id',targetKey:'test_id' }); //一对一
    };
     
    return Test ;
};

5.操作符

const Op = Sequelize.Op
[Op.and]: {a: 5}           // 且 (a = 5)
[Op.or]: [{a: 5}, {a: 6}]  // (a = 5 或 a = 6)
[Op.gt]: 6,                // id > 6
[Op.gte]: 6,               // id >= 6
[Op.lt]: 10,               // id < 10
[Op.lte]: 10,              // id <= 10
[Op.ne]: 20,               // id != 20
[Op.eq]: 3,                // = 3
[Op.not]: true,            // 不是 TRUE
[Op.between]: [6, 10],     // 在 6 和 10 之间
[Op.notBetween]: [11, 15], // 不在 11 和 15 之间
[Op.in]: [1, 2],           // 在 [1, 2] 之中
[Op.notIn]: [1, 2],        // 不在 [1, 2] 之中
[Op.like]: '%hat',         // 包含 '%hat'
[Op.notLike]: '%hat'       // 不包含 '%hat'
[Op.iLike]: '%hat'         // 包含 '%hat' (不区分大小写)  (仅限 PG)
[Op.notILike]: '%hat'      // 不包含 '%hat'  (仅限 PG)
[Op.startsWith]: 'hat'     // 类似 'hat%'
[Op.endsWith]: 'hat'       // 类似 '%hat'
[Op.substring]: 'hat'      // 类似 '%hat%'
[Op.regexp]: '^[h|a|t]'    // 匹配正则表达式/~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.notRegexp]: '^[h|a|t]' // 不匹配正则表达式/!~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.iRegexp]: '^[h|a|t]'    // ~* '^[h|a|t]' (仅限 PG)
[Op.notIRegexp]: '^[h|a|t]' // !~* '^[h|a|t]' (仅限 PG)
[Op.like]: { [Op.any]: ['cat', 'hat']} // 包含任何数组['cat', 'hat'] - 同样适用于 iLike 和 notLike
[Op.overlap]: [1, 2]       // && [1, 2] (PG数组重叠运算符)
[Op.contains]: [1, 2]      // @> [1, 2] (PG数组包含运算符)
[Op.contained]: [1, 2]     // <@ [1, 2] (PG数组包含于运算符)
[Op.any]: [2,3]            // 任何数组[2, 3]::INTEGER (仅限PG)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值