5 mysql数据库

框架提供了 egg-mysql 插件来访问 MySQL 数据库。这个插件既可以访问普通的 MySQL 数据库,也可以访问基于 MySQL 协议的在线数据库服务。

5.1 安装与配置

安装对应的插件 egg-mysql :

1
npm i --save egg-mysql

开启插件:

1
2
3
4
5
// config/plugin.js
exports.mysql = {
enable: true,
package: 'egg-mysql',
};

config/config.${env}.js 配置各个环境的数据库连接信息。

5.1.1 单数据源

如果我们的应用只需要访问一个 MySQL 数据库实例,可以如下配置:
使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// config/config.${env}.js
exports.mysql = {
// 单数据库信息配置
client: {
// host
host: 'mysql.com',
// 端口号
port: '3306',
// 用户名
user: 'test_user',
// 密码
password: 'test_password',
// 数据库名
database: 'test',
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};
1
await app.mysql.query(sql, values); // 单实例可以直接通过 app.mysql 访问

5.1.2 多数据源

如果我们的应用需要访问多个 MySQL 数据源,可以按照如下配置:

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
exports.mysql = {
clients: {
// clientId, 获取client实例,需要通过 app.mysql.get('clientId') 获取
db1: {
// host
host: 'mysql.com',
// 端口号
port: '3306',
// 用户名
user: 'test_user',
// 密码
password: 'test_password',
// 数据库名
database: 'test',
},
db2: {
// host
host: 'mysql2.com',
// 端口号
port: '3307',
// 用户名
user: 'test_user',
// 密码
password: 'test_password',
// 数据库名
database: 'test',
},
// ...
},
// 所有数据库配置的默认值
default: {
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};

5.2 封装增删改查

5.2.1、插入,向users表内插入一条数据

1
2
3
4
5
const result = await this.app.mysql.insert('users', {
name: 'wjw',
age: 18
})
// 判断:result.affectedRows === 1

5.2.2、查询,查询users表name=Jack的数据

1
2
3
4
5
6
7
8
9
10
11
12
const result = await this.app.mysql.select('users', {
columns: ['id', 'name'], //查询字段,全部查询则不写,相当于查询*
where: {
name: 'wjw'
}, //查询条件
orders: [
['id', 'desc'] //降序desc,升序asc
],
limit: 10, //查询条数
offset: 0 //数据偏移量(分页查询使用)
})
//判断:result.length > 0

5.2.3、修改,修改users表id=1的数据age为20

1
2
3
4
5
6
7
8
const result = await this.app.mysql.update('users', {
age: 20 //需要修改的数据
}, {
where: {
id: 1
} //修改查询条件
});
//判断:result.affectedRows === 1

5.2.4、删除,删除users表name=wjw的数据

1
2
3
const result = await this.app.mysql.delete('users', {
name: 'wjw'
})