自定义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"));的方式调用