XML中自定义复杂SQL
最后更新:2023-10-18 20:52:30
|
状态:未完成
文件格式:
<?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")或addCondition("PW_USER_ID",1001) --> WHERE DEPT IN({DEPT}) AND GROUP_ID = ${GROUP_ID} AND ${CONDITION_001} </text>
<condition id="TEL"> M.TEL = ? <!-- condition("TEL:tel")或addCondition("TEL","15800000000") --> </condition>
<condition id="AGE"> M.AGE >= {AGE_MIN} AND M.AGE < {AGE_MAX} <!--condition("AGE.AGE_MIN:min","AGE.AGE_MAX:max") --> <!--或addCondition("AGE.AGE_MIN","10").addCondition("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")或addCondition("TYPE.USER_TYPE","01") --> M.DATA_STATUS IS NOT NULL </condition>
<condition id="NM"> <!--condition("NM:nm")或addCondition(NM","zh") 注意这里赋值时不需要通配符% --> M.NM LIKE '%?%' 或者M.NM LIKE '%{NM}%' </condition>
<group> M.NM </group>
<order> M.NM ASC </order> </sql> </sqls>{id} 或者 :id 格式用来标记占位符,在最终生成的SQL中通过?替换 ${id}
也可以通过${id} 或者 ::id 格式用来标记占位符,但最终生成SQL时,不会用?替换,而是直接用sql.replace("${id}",value)的形式生成
java中调用SQL时,通过condition("id:key")或addCondition("id","value")的形式赋值
如果当前文件path=/WEB-INF/classes/sql/hr/user/stat.xml, 则java中调用通过service.querys("hr.user.stat:ROLE_LIST",condition("id:key"));的方式调用