自定义SQL

针对一些视图无法实现的复杂的查询,如果是常用的可以创建数据函数或存储过程。

临时的可以自定义SQL来实现

SQL文件的根目录通过anyline-config.xml指定 <property key="SQL_STORE_DIR">/WEB-INF/classes/sql</property>

文件格式:

<?xml version="1.0" encoding="UTF-8"?>
<sqls>
    <sql id="ROLE_LIST">
        <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"));的方式调用

其他文档