etms/WEB-INF/mapping/说明.txt

58 lines
3.1 KiB
Plaintext
Raw Permalink Normal View History

SQL语句的构建基于FreeMarker模板即在语句中可以使用FreeMarker支持的所有标签如<#if>、<#list>以及${expr}等
标签格式:
<sql id="sqlId"><![CDATA[
SQL EXPRESSION
]]></sql>
<sql id="sqlIdCount"><![CDATA[
SQL EXPRESSION
]]></sql>
在分页查询时sqlIdCount中的语句将作为查询所有记录数的语句
例:
<sql id="sqlId"><![CDATA[
SELECT USR.ID, USR.NAME, GP.NAME, GP.CODE FROM USERS USR
LEFT JOIN GROUP GP ON USR.ID = GP.USERID
WHERE USR.FLAG = 0
<@p p=" AND (%s)" s=" OR " f="USR.%S LIKE ?">name,loginname</@p>
]]></sql>
<sql id="sqlIdCount"><![CDATA[
SELECT 1 FROM USER
WHERE USR.FLAG = 0
<@p p=" AND (%s)" s=" OR " f="USR.%S LIKE ?">name,loginname</@p>
]]></sql>
例中的sqlIdCount会在执行sqlId的过程中自动执行这可在某些复杂语句中提高查询性能
自定义标签说明:
标签:<@p [p="prefix %s"] [s="separator"] [f="format"]>field1,field2,...</p>
作用检测所传参数中是否包含所列字段field1,field2,...,对检测出的每个字段生成相应的表达式
标签参数[p="prefix %s"]:默认为空,表示若所传参数中包含列出的字段,则对处理完成的语句进行格式化,其中%s表示处理完成的语句
标签参数[s="separator"]:默认为",",表示各表达式之间的分隔符
标签参数[f="format"]:默认为"%S = ?",表达式的格式化字符串,其中%s或%S大写表示当前字段的名称若字符串中包含?,则会将对应参数值添加到语句参数列表
特殊用法1若所传参数为Collection<Object[]),则表示批量更新操作,如:
对于语句UPDATE TABLE1 SET <@p>name,age</p> WHERE <@p>id</p>,传入以下参数:
List<Object[]> param = new ArrayList<Object[]>();
param.add(new Object[]{"Jack", 27, 1});
param.add(new Object[]{"Rose", 25, 2});
data.put("name", param);
data.put("age", param);
data.put("id", param);
则执行的语句为:
UPDATE TABLE1 SET NAME = ?, AGE = ? WHERE ID = ?
执行结果为更新两条数据
特殊用法2若所传参数为Object[],则针对每个数组值生成一次表达式,如:
对于语句DELETE FROM TABLE1 WHERE ID IN(<@p f="?">id</@p>),传入以下参数:
Object[] param = new Object[]{1, 2, 3};
data.put("id", param);
则执行的语句为:
DELETE FROM TABLE1 WHERE ID IN(?, ?, ?)
执行结果为删除id为123的数据
示例1<@p>id</@p>
1.所传参数HashMap{},结果:"",语句参数列表:[]
2.所传参数HashMap{id=>37},结果:"ID = ?",语句参数列表:[37]
示例2<@p p="AND (%s)" s=" OR" f="UPPER(%S) LIKE ?">title,content</@p>
1.所传参数HashMap{title=>"标题"},结果:"AND UPPER(TITLE) LIKE ?",语句参数列表:["标题"]
2.所传参数HashMap{title=>"标题",content=>"内容"},结果:"AND (UPPER(TITLE) LIKE ? OR UPPER(CONTENT) LIKE ?)",语句参数列表:["标题","内容"]