query/querys
最后更新:2024-09-28 09:54:17
|
状态:未完成
查询有3类方法
querys/query 返回 DataSet/DataRow
maps返回List<Map>
selects/select 返回EntitySet<Entity>/Entity
query的查询条件参数主要有两个来源
service.query("表名或SQL", ConfigStore configs, String ... conditions)
先说conditions:这个比较简单
-
可以是原生的SQL,没有什么是原生SQL解决不了的,如果下面几种方式生成SQL比较困难,不如直接写原生的SQL
如 service.querys("user", "cod = 1", "name is not null"); -
可以是key:value分隔的形式
这种方式主要用来实现值为空时忽略当前条件
如 String code = "" //一般是由调用方传入参数 或从rquest 中获取的参数
service.query("user", "code:"+code)
当code值为空时(包括""与null) 即 "code:"或"code:null"
最终生成SQL SELECT * FROM user 没有查询条件
也有些情况要求code必须有值,如果没有值整个SQL就不执行,即返回0行数据
service.query("user", "++code:"+code)
++表示当前条件必须有值,如果没有值则中断SQL执行
也有比较少的情况生成is null的条件
service.query("user", "+code:"+code)
"code:","code:null"效果一样
生成SQL: SELECT * FROM USER WHERE CODE IS NULL
+表示当前条件必须参与查询
configs:一般用来构造比较复杂的条件
-
经常是通过AnylineController.condition()方法返回,该方法主要用来以("COLUMN:param")的格式接收rquest参数
常用的约定格式,可能用到的格式千变万化,具体参考【约定格式】
"CODE:code" CODE = ?
"CODE:[code]" CODE IN(?,?)
"CODE:%code%" CODE LIKE '%?%'
"[CODES]:code" FIND_IN_SET(?, CODES)
同样用+以及++处理空值的情况
另外分页也可以在这里设置condition(true) 表示需要分页,分页参数有全局配置一般不需要在这里设置参考【分页查询示例】 -
如果没有web环境也可以直接创建 ConfigStore configs = new DefaultConfigStore()
一般在后台中构造查询条件时会用到,参考【ConfigStore】
configs.and("ID", "1")
.and("CODE", "2")
.between("AGE", 10, 20)