etms/WEB-INF/mapping/说明.txt
liyuchen c24bea2687 Initial commit: JCDP 教育培训管理系统 v54
- 系统管理模块(用户/角色/组织/权限/日志)
- 教育培训计划管理模块
- 教育培训实施模块
- 考试管理模块
- 调研问卷管理模块
- 外派培训管理模块
- 年度培训总结模块
- 学习资源管理模块
- 任职资格管理模块
- 即时通讯模块
- APP 版本管理
- 统计分析模块(FineReport)
- 代码审查标准和报告(CODE_REVIEW_GUIDE.md, CODE_REVIEW_REPORT.md)
- 项目开发指南(PROJECT_GUIDE.md)
2026-04-16 16:41:34 +08:00

58 lines
3.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ?)",语句参数列表:["标题","内容"]