数据集参数化语法
插值
${参数名}
插值-带默认值
${参数名!默认值}
${(参数名.属性名)!默认值}
如果对应的参数值没有填写,将会插入
默认值。
插值-默认空白
${参数名!}
${(参数名.属性名)!}
如果对应的参数值没有填写,将不会插入任何内容。
条件判断
<#if 条件></#if>
<#if 条件>...<#else>...</#if>
<#if 条件>...<#elseif 条件>...<#else>...</#if>
具体的
条件格式参考下面的条件章节。
数组、集合遍历
<#list 参数名 as item>...${item}...</#list>
<#list 参数名 as item>...${item}...<#sep>分隔符</#sep></#list>
条件
参数名??当用户填写了
参数名对应的值时执行条件内容,可用于处理非必填参数。
参数名当布尔型参数值为
true时执行条件内容。
!参数名当布尔型参数值为
false时执行条件内容。
参数名 == "..." 参数名 != "..."当字符串型参数值等于、不等于给定值时执行条件内容。
参数名 == ... 参数名 != ... 参数名 gt ... 参数名 gte ... 参数名 lt ... 参数名 lte ...当数值型参数值等于、不等于、大于、大于等于、小于、小于等于给定值时执行条件内容。
条件1 || 条件2 条件1 && 条件2 !条件条件组合:或、与、非。
SQL预编译参数语法
在SQL数据集中,可以使用
${pc(参数名)}
的预编译语法,避免SQL注入安全问题。
需要注意的是,对于字符串参数,在使用预编译语法时,不应再添加单引号:
'${pc(参数名)}'
示例:
SELECT NAME, VALUE FROM T_ANALYSIS WHERE NAME = ${pc(name)} AND VALUE >= ${pc(value)}
SELECT * FROM T_ANALYSIS WHERE NAME LIKE CONCAT('%', ${pc(keyword)})
pc表示precompile的缩写。
示例
SELECT NAME, VALUE FROM T_ANALYSIS
WHERE NAME = '${name}'
<#if 最小值??>
AND VALUE >= ${最小值}
<#else>
AND VALUE IS NOT NULL
</#if>
<#if 名称集合??>
AND NAME IN
(
<#list 名称集合 as item> '${item}' <#sep>,</#sep></#list>
)
</#if>
<#if ascByName>
ORDER BY NAME ASC
</#if>
<#if limitCount??>
limit 0, ${limitCount}
</#if>
对应上述示例的数据集参数为:
| 名称 | 类型 | 必填 | 输入框类型 |
|---|---|---|---|
| name | 字符串 | 是 | 文本框 |
| 最小值 | 数值 | 否 | 文本框 |
| 名称集合 | 字符串 | 否 | 复选框、多选下拉框 |
| ascByName | 布尔值 | 是 | 单选框 |
| limitCount | 数值 | 否 | 文本框 |
参数化语句的解析底层采用了Freemarker,详细语法请参考其官方文档。