带表达式的SQL配置如下:
select * from t_sqlapi where minId=
<if test='maxId !=null'>
and maxId=
</if>
and 1==1
<if test='name !=null'>
and name=
</if>
参数如下:
Map<String, Object> map = new HashMap<>();
map.put("minId", 100);
map.put("maxId", 500);
map.put("name", "itkey");
期待的转换结果如下:
select * from t_sqlapi where minId=? and maxId=? and 1==1 and name=?
------参数:------
100,500,itkey
转换思路
第1步:text转dom对象
把整个带表达式的sql脚本,通过dom4j工具转成dom对象方便后面数据的解析
第2步:解析<if></if>
标签
<if></if>
标签中的表达式test='maxId !=null’使用OGNL表达式工具解析其内容。如果表达式的结果是true,则<if></if>
标签的内部的子元素则生。
第3步:替换#{xxx}
为占位符?
需要把变量的部分#{xxx}
,替换成sql中的占位符?
,然后把参数的值按变量摆放的顺序传参。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)