XML中自定义复杂SQL

最后更新:2024-08-29 13:39:12 | 状态:未完成

文件格式:



<?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>

{id} 或者 :id 格式用来标记占位符,在最终生成的SQL中通过?替换 ${id}
${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"));的方式调用

首页 最近更新 搜索 提交 回复