XML中自定义复杂SQL
最后更新:2024-08-29 13:39:12
|
状态:未完成
文件格式:
{id} 或者 :id 格式用来标记占位符,在最终生成的SQL中通过?替换 ${id}<?xml version="1.0" encoding="UTF-8"?> <sqls> <sql id="ROLE_LIST" strict="true"> <!--strict:默认true 表示不允许添加XML定义之外 的临时查询条件, false:表示可以在java临时添加condition子标签中没有条件--> <title>用户角色列表</title> <text> SELECT M.ID AS ID, M.NM AS NM, CASE WHEN F.ID IS NULL THEN 0 ELSE 1 END AS CHK FROM pw_role AS M LEFT JOIN PW_USER_ROLE AS F ON M.ID = F.ROLE_ID AND PW_USER_ID = {PW_USER_ID} <!--condition("PW_USER_ID:usr")或configs.param("PW_USER_ID",1001) --> WHERE DEPT IN({DEPT}) AND GROUP_ID = ${GROUP_ID} ${AND (ID >:MAX OR ID<:MIN)} ${AND TYPE_CODE = :TYPE_CODE} <!--空值时忽略的条件按这个格式 ${} 中缺少任意一个参数值都忽略整个${}--> AND ${CONDITION_001} </text> <condition id="TEL"> M.TEL = ? <!-- condition("TEL:tel")或configs.param("TEL","15800000000") --> </condition> <condition id="AGE"> M.AGE >= {AGE_MIN} AND M.AGE < {AGE_MAX} <!--condition("AGE.AGE_MIN:min","AGE.AGE_MAX:max") --> <!--或configs.param("AGE.AGE_MIN","10").param("AGE.AGE_MAX","20") --> </condition> <condition id="FLAG" required="true"> <!--required表示当前条件必须,如没有值则默认取null --> M.FLAG = ? </condition> <condition id="CODE"> M.AGE IN({CODE}) </condition> <condition id="STATUS" static="true"> <!--static表示当前条件是静态条件不需要动态赋值 --> M.DATA_STATUS IS NOT NULL </condition> <condition id="TYPE" static="true" test="USER_TYPE=2"> <!--test中是一个ognl表达式,表达示返回true时当前条件有效, --> <!--condition("TYPE.USER_TYPE:type")或configs.param("TYPE.USER_TYPE","01") --> M.DATA_STATUS IS NOT NULL </condition> <condition id="NM"> <!--condition("NM:nm")或configs.param(NM","zh") 注意这里赋值时不需要通配符% --> M.NM LIKE '%?%' 或者M.NM LIKE '%{NM}%' </condition> <condition id="YMD"> ${AND M.YMD >= :YMD_FR OR M.YDM <= :YMD_TO} AND Y = 2020 </condition> <group> M.NM </group> <order> M.NM ASC </order> </sql> </sqls>
${AND ID = :ID} SQL体中拆不出来独立的condition时可以用这个格式来实现空值时忽略当前条件
也可以通过${id} 或者 ::id 格式用来标记占位符,但最终生成SQL时,不会用?替换,而是直接用sql.replace("${id}",value)的形式生成
java中调用SQL时,通过condition("id:key")或configs.param("id","value")的形式赋值
如果当前文件path=/WEB-INF/classes/sql/hr/user/stat.xml, 则java中调用通过service.querys("hr.user.stat:ROLE_LIST",condition("id:key"));的方式调用