query/querys

最后更新:2024-09-28 09:54:17 | 状态:未完成

查询有3类方法

querys/query 返回 DataSet/DataRow

maps返回List<Map>

selects/select 返回EntitySet<Entity>/Entity


比较常用的是querys/query
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)
首页 最近更新 搜索 提交 回复