${if(condition, result_if_true, result_if_false)}
这个本质是一个动态参数构造过程。
首先说参数,在FR里面,定义一个参数的语法是 ${p},这个是非字符串形式的,否则就需要 ‘${p}’,其中 p 就是参数名称。
下面再说动态参数。
所谓动态参数就是参数是可用可不用的,如果前端没有选择这个参数,那么就不用参数过滤,否则就进行参数过滤,这里的参数过滤使用的 动态SQL拼接的方式实现的。
下面看这个动态的过程是如何实现的。
if(len(p) = 0, " ", " and name like '%" + p + "%'")
这个就是一个if函数执行过程。
len(p) = 0 代表参数内容为空,那么就不过滤,即通过一个空的字符串, “ ”来实现。
否则 就拼接 " and name like '%" + p + "%'",这里默认是一个字符型参数,而且模糊匹配,算是相对复杂的了,其实质就是 and name like '%p%'.由于动态参数自带了 and,所以,一般都是这样写的
SELECT * FROM Table where 1=1 if(len(p) = 0, " ", " and name like '%" + p + "%'")
在前端把这个名为 P 的参数添加即可。
希望你能明白,这个只是一个语法,习惯就好了。