egg数据库配置
框架提供egg-mysql插件来访问Mysql数据库。这个插件可以访问普通的Mysql数据库,也可以访问基于MySQL协议的在线数据库
安装与配置
$ npm i egg-mysql --save
exports.mysql = {
enabel: true ,
package: 'egg-mysql'
}
exports.mysql = {
client: {
host: 'mysql.com' ,
port: '3306' ,
user: 'user' ,
password: 'password' ,
database: 'databaseName' ,
}
app: true ,
agent: false ,
}
await this .app.mysql.query(sql, values)
exports.mysql = {
clients: {
db1: {
host: 'mysql.com' ,
port: '3306' ,
user: 'user1' ,
password: 'password1'
database: 'database1' ,
},
db2: {
host: 'mysql2.com' ,
port: '3307' ,
user: 'user2' ,
password: 'password2' ,
database: 'database2' ,
}
}
default : {
.....
},
app: true ,
agent: false
}
const client1 = this .app.mysql.get ('db1' );
await client1.query(sql, values);
const client2 = this .app.mysql.get ('db2' );
await client2.query(sql, values);
编写CRUD语句
crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
crate
可以直接使用insert方法插入一条记录insert('table_name' , options)
· table_name: 数据库名
· options: 字段key,value传参
const result = await this .app.mysql.insert('posts' , { title: 'hello world' })
=> INSERT INTO posts ('title' ) VALUE ('hello world' );
console.log(result)
=> 返回操作数据信息,是一个对象
{
fieldCount: 0 ,
affectedRows: 1 ,
insertId: 3710 ,
serverStatus: 2 ,
warningCount: 2 ,
message: '' ,
protocol41: true ,
changedRows: 0
}
const insertSuccess = result.affectedRows === 1
Read
可以直接使用get 方法或select 方法获取一条或多条记录,select 方法支持条件查询与结果的定制
const post = await this .app.mysql.get ('posts' , {id: 12 });
=> SELECT * FROM posts WHERE id = 12 LIMIT 0 , 1 ;
const post = await this .app.mysql.select ('posts' );
=> SELECT * FROM posts
const options = {
where : { status: 'draft' , author: ['author1' , 'author2' ] },
colums: ['author' , 'title' ],
orders: [['created_at' , 'desc' ], ['id' , 'desc' ]],
limit: 10 ,
offset: 0
};
const results = await this .app.mysql.select ('posts' , options)
=> SELECT author, title FROM posts
WHERE suatus = 'draft' AND author IN ('author1' , 'author2' )
ORDER BY created_at DESC, id DESC LIMIT 0, 10 ;
update
可以直接使用update方法更新数据库记录
const row = {
id: 123 ,
name: 'jack' ,
otherField: 'other field value' ,
modifiedAt: this .app.mysql.literals.now,
}
const resutl = await this .app.mysql.update('posts' , row);
=> UPDATE posts SET name='jack' ,modifiedAt = NOW() WHERE id = 1 ;
const updateSuccess = result.affectedRows === 1 ;
const row = {
name: 'jack' ,
otherField: 'other field value' ,
modifiedAt: this .app.mysql.literals.now,
}
const options = {
where : {
custom_id: 456
}
};
const result = await this .app.mysql update('posts' , row, options);
=> UPDATE posts SET name='jack' , modifiedAt= NOW() WHERE custom_id =456
Delete
const result = await this .app.mysql.delete('posts' , {author: 'jack' });
=> DELETE FROM posts WHERE author = 'jack' ;
直接执行sql语句
插件本身也支持拼接与直接执行sql 语句。使用query可以执行合法的sql 语句
const sql = 'UPDATE posts SET name=jack' ;
const result = await this.app.mysql.query(sql )
= > UPDATE posts SET name = 'jack' ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!