支持基本的 CRUD。
它的实例提供简单的 CRUD API 封装(记作 builder),数据的返回格式参考 mysql2 文档。
假设有一张表 t_user:
| id | name | age | addr | createAt | updateAt |
|---|---|---|---|---|---|
int |
varchar |
varchar |
varchar |
datetime |
datetime |
update/insert/delete 返回数据结构:
{
fieldCount: 0,
affectedRows: 1,
insertId: 55, // insert
info: '',
serverStatus: 2,
warningStatus: 0
}select 返回数据结构:
[{
id: 1,
name: 'jonge',
age: 27
}]const { Query } = require('mysql-orm')()
const q = new Query('t_user')
let [{ insertId, affectedRows }] = await q
.insert({
name: 'INSERT test',
age: 11,
addr: 'hell'
})
.run()const q = new Query('t_user')
let [data] = await q
.select(['id', 'name'])
.where([
{
key: 'name',
value: 'SELECT test%',
op: 'LIKE'
}
])
.limit(2)
.orderBy('name', 'DESC')
.run().then(([data]) => {
// data : [{id, name}, {id, name}]
})const q = new Query('t_user')
q.update({
name: 'new name',
age: 44
})
.where({ id: 2 })
.run()const q = new Query('t_user')
const [{ affectedRows }] = await q
.delete()
.where({ id: 2 })
.run()const q = new Query('table_name')run(?connection)
注意:所有的 CRUD 都必须在链式调用末尾使用 .run() 来真正触发 SQL 执行。
run() 用来启动查询,如果传入了 connection,则会使用该 connection 执行 SQL,即 connection.query(sql)。
where(Object|Array)、whereOr(Object|Array)
转为
WHERE语句。
- 快捷
=和IN
// id = 2 AND name = 'jonge'
where({
id: 2,
name: 'jonge'
})
// id IN (1, 2, 3)
where({
id: [1, 2, 3]
})- 标准条件
// id IN (1, 2) AND name LIKE 'jonge%'
where([{
key: id,
value: [1, 2],
op: 'IN'
}, {
key: name,
value: 'jonge%',
op: 'LIKE'
}])whereOr() 和 where() 除了把 SQL 中的 AND 换为 OR 外,用法完全一样。
select(columns: String|Array|Object[])
转为
SELECT x。
select('name') // SELCECT name
select(['id', 'name']) // SELECT id, name
select(['id', { // SELECT id, createAt as ctime
column: 'createAt',
alias: 'ctime'
}])orderBy(columns: String|String[], ?'ASC'|'DESC')
转为
ORDER BY x。
orderBy('name') // ORDER BY `name`
orderBy('name', 'DESC') // ORDER BY `name` DESC
orderBy(['name', 'age']) // ORDER BY `name`, `age`groupBy(column: String)
转为
GROUP BY
groupBy('age') // GROUP BY `age`limit(offset: Number, ?count: Number)
转为
LIMIT x。
limit(2) // LIMIT 2
limit(1, 10) // LIMIT 1, 10insert(columns: Object)
// INSERT INTO table SET name = 'robot 1', age = 0
update({
name: 'robot 1',
age: 0
})update(columns: Object)
// UPDATE table SET name = 'new name', age = 23
update({
name: 'new name',
age: 23
})delete(?whereParams)
可以在这里指定条件语句,但注意,如果在后面继续调用 where,后者会替换前者。
// DELETE FROM table WHERE id = 2
delete({
id: 2
})
// DELETE FROM table WHERE id = 3
where({ id: 2 }).delete({ id: 3 })