个人博客 个人博客
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

董先亮

前端react开发
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Egg.js

    • Egg.js开发
    • Sequelizes使用
      • 前言
        • 关于ORM框架
      • 介绍
      • 在egg.js中使用
      • 使用
  • Node
  • Egg.js
NeverStop1024
2023-04-22
目录

Sequelizes使用

# 前言

# 关于ORM框架

ORM框架主要作用是简化数据库编程,有如下几点:

  • 提高开发效率:ORM框架提供了简单易用的API,从而不需要再写大量的SQL语句。
  • 减少SQL注入攻击:ORM通过参数化查询方式,可以防止SQL注入攻击。
  • 提高代码可读性:ORM框架将数据库表和实体类进行了映射,使代码可读性更高。
  • 提高代码可移植性:使用ORM框架API操作数据库,屏蔽了不同数据库之间的操作差异,可移植性更高。

# 介绍

Sequelize (opens new window)是一个基于promise的Node.js ORM框架。

# 在egg.js中使用

1. 安装

npm install --save egg-sequelize mysql2
1

2. 在config/plugin.js做配置

'use strict';

module.exports = {
  sequelize: {
    enable: true,
    package: 'egg-sequelize',
  }
}
1
2
3
4
5
6
7
8

3. 在config/config.default.js做配置

  // sequelize 配置
  config.sequelize = {
    username: 'root',
    password: '',
    database: 'database_name',
    host: '127.0.0.1',
    timezone: '+08:00', // 使用的时区为 UTC+8 时区
    define: {
      timestamps: false, // 表中不包含 createdAt 和 updatedAt 两个字段
      freezeTableName: true, // 表示表名与模型名称完全匹配,即不添加任何前缀或后缀。
      underscored: false // 不使用下划线作为单词之间的分隔符,而是使用驼峰式命名法(如:createdAt 而不是 created_at)。
    },
    dialectOptions: { // 让读取date类型数据时返回字符串而不是UTC时间
      dateStrings: true,
      typeCast(field, next) {
        if(field.type === "DATETIME"){
          return field.string();
        }
        return next();
      }
    }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

4.创建模型

// app/model/User.js
'use strict';
module.exports = app => {
  const { STRING, DATE } = app.Sequelize;

  const User = app.model.define('tb_user', {
    user_id: {
      type: STRING,
      primaryKey: true,
      allowNull: false,
      field: 'user_id',
    },
    openid_mini: {
      type: STRING,
      field: 'openid_mini',
    },
    avatar: {
      type: STRING,
      field: 'avatar',
    },
    create_at: {
      type: DATE,
      field: 'create_at',
    },
    update_at: {
      type: DATE,
      field: 'update_at',
    },
    user_name: {
      type: STRING,
      field: 'user_name',
    },
    password: {
      type: STRING,
      field: 'password',
    },
    nick_name: {
      type: STRING,
      field: 'nick_name',
    },
    real_name: {
      type: STRING,
      field: 'real_name',
    },
  }, {
    tableName: 'tb_user',
    freezeTableName: true,
    timestamps: false,
  });

  return User;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

5.在代码中进行使用

// app/service/auth.js

'use strict';
const Service = require('egg').Service;

class User extends Service {
    /**
     * @function 用户登录
     * @param data {{user_name:string, password: string}} 入参
    * */
    async login(data) {
        const { ctx, app } = this;
        const user = await ctx.model.User.findOne({
            where:data
        })
    }
}

module.exports = User;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 使用

  1. 学会Sequelize,让你操作数据更丝滑 (opens new window)
编辑 (opens new window)
上次更新: 2023/04/23
Egg.js开发

← Egg.js开发

最近更新
01
mock使用
07-12
02
websocket即时通讯
07-12
03
前端面试题
07-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 NeverStop1024 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式