查询
API 概览
1. CRUD API
查询 | 添加 | 修改 | 删除 |
---|---|---|---|
all | |||
query | updateByQuery | deleteByQuery | |
queryPager | |||
queryByCondition | updateByCondition | deleteByCondition | |
queryByField | updateByField | deleteByField | |
getById | add | update | deleteById |
getByField |
说明 :
oor 提供了
Table
View
两个构造器区别就是 View 实体 只包含查询相关 API,而 Table 实体 包含全部 API。
后两行API :getById / getByField / add / update /deleteById
操作单个对象,其它API操作多个对象。
查询
QuerySchema
和Condition
结构同构也适用于 update/delete
2. 自定义 API
除以上 CRUD
操作外,所有对象还包括两个API,用于自定义扩展
exec()
: 等同于数据库连接的query
方法 (pg/mysql), 或search
方法(es)getClient()
: 获取数据连接对象,用于调用一些更底层的方法。
查询结构:QuerySchema
- 查询结构体是一个对象
- 由
固定参数
和自定义参数
组成 固定参数
以_
结尾自定义参数
支持 魔法后缀, 相当于语法糖。自定义参数
=字段名
+魔法后缀
示例代码
User.query({
start_: 0,
count_: 20,
order_: 'id',
by_: 'desc',
idMin: 200, // id > 200
idNot: 300, // id != 300
createDateMin : '2022-01-01', // createDate > 2022-01-01
createDateMax : new Date('2022-02-01'), // createDate < 2022-02-01
nameLike: 'title', // name like %title%
name: 'oor' // product = oor (No Suffix, No Magic )
})
固定参数
参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
start_ | number | 开始 | 0 |
count_ | number | 数量 | 10 |
order_ | string | 排序字段 | id |
by_ | 'asc' | 'desc' | 排序方法 | desc |
keyword_ | string | 关键字(暂不支持) |
魔法后缀
除 固定参数 外,查询体内其它属性,可以由 字段名
+ 魔法后缀
组成,没有加后缀时,等同于 =
。
'Min', 'MinThan', 'Max', 'MaxThan', // commom > , >= , < , <=
'MinH', 'MinD', 'MinM', 'MaxH', 'MaxD', 'MaxM', // Only Date Hour / Day / Month
'Like', 'Likel', 'Liker', // Only String like leftlike rightlike
'Bt', 'BtD', 'BtY', 'BtM', // BETWEEN, support Number/Date ,'BtY', 'BtM', 'BtD' Only Spport Date
'Not', // != or <>
'IsNull', 'NotNull', // isNull or Not NULL This Suffix will avoid value
'>', '>=', '<', '<=', '=', '!=', '<>' // Comparison Functions,
'In', 'NotIn' // SQL IN Condition , use "," sperate items, Not support boolean date
详细列表:
后缀 | 说明 | 支持 PG/MySql | 支持 ES |
---|---|---|---|
= | 等于 | All (default) | All (default) |
Min , > | 大于 | All | Number, Date |
MinThan , >= | 大于等于 | String, Number, Date | Number, Date |
Max , < | 小于 | All | Number, Date |
MaxThan , <= | 小于等于 | String, Number, Date | Number, Date |
MinH | 大于等于(小时) | Date | Date |
MinD | 大于等于(天) | Date | Date |
MinM | 大小等于(月) | Date | Date |
MaxH | 小于等于(小时) | Date | Date |
MaxD | 小于等于(天) | Date | Date |
MaxM | 小于等于(月) | Date | Date |
Like | LIKE | String | String |
Likel | LEFT LIKE | String | String |
Liker | RIGHT LIKE | String | String |
Bt | 介于 | Number, Date | Number, Date |
BtD | 介于天 | Date | Date |
BtM | 介于月 | Date | Date |
BtY | 介于年 | Date | Date |
Not ,<>,!= | 不等于 | String, Number, Boolean | String, Number, Boolean |
IsNull | 为空 | All | All |
NotNull | 不为空 | All | All |
In | IN | String,Number | String,Number |
NotIn | NOT IN | String,Number | String,Number |
Bt , In , NotIn
Bt 的语法类似于 区间记数法 :
一些示例:
示例 | 说明 |
---|---|
{ fieldBt: '1' } | field >= 1 |
{ fieldBt: '[1' } | field > 1 |
{ fieldBt: '(1' } | field > 1 |
{ fieldBt: ',100' } | field <= 100 |
{ fieldBt: ',100]' } | field <= 100 |
{ fieldBt: ',100)' } | field < 100 |
{ fieldBt: '1,100' } | field >= 1 AND field <= 100 |
{ fieldBt: '[1,100)' } | field >= 1 AND field < 100 |
{ fieldBt: '(1,100)' } | field > 1 AND field < 100 |
{ fieldBt: '20201011,2022-10-11 11:11:11' } | field > {time-20201011} AND field < { time-2022-10-11 11:11:11} |
In
NotIn
语法 : In
, NotIn
都是以逗号进行分割的字符串。
通用条件:Condition
说明:
Condition
可以用于构建极复杂的查询子句。但并不推荐使用, 因为
Condition
执行时不验证,直接转为 SQL / DSL 执行。
- 一个 Condition 可以任意多个
查询Item
或下级Condition
组成成,Condition 的层级可无限嵌套。 - 一个 Item 由
column
(注意:数据库字段名称) 和value
、fn
组成,fn
为上面的任意后缀,默认为 '=' - Condition 同样也可以做为
updateByCondition
/deleteByCondition
操作的条件
分页查询
示例
const condition: WhereParam = {
link: 'AND',
items: [
{ column: 'a1', value: 'value1' },
{ column: 'a2', fn: '<', value: 'value2' },
{
link: 'OR', items: [
{ column: 'b1', fn: 'Like', value: 'value3' },
{
link: 'NOT', items: [
{ column: 'd1', value: 'test1' },
{ column: 'd2', value: 'test2' },
{
link: 'AND', items: [
{ column: 'e1', value: 'test6' },
{ column: 'e2', value: 'test7' },
]
}
]
},
{ column: 'b2', fn: '>=', value: 'value4' },
]
},
{ column: 'a3', fn: '<', value: 'value1' },
]
}
await entity.queryByCondition(condition)