解决Mybatis中foreach嵌套使用if标签对象取值的问题
程序员文章站
2022-03-02 18:30:13
目录foreach嵌套使用if标签对象取值问题大体格式解决办法代码如下mybatis if 语句嵌套要求foreach嵌套使用if标签对象取值问题最近做项目过程中,涉及到需要在 mybatis 中 使...
foreach嵌套使用if标签对象取值问题
最近做项目过程中,涉及到需要在 mybatis 中 使用 foreach 进行循环读取传入的查询条件,动态拼接sql语句,接口传入的查询条件格式:{"advancesearchlist":[{"searchtype":10,"searchtext":"12"}]} ,根据我定义的参数格式,需要在 mybatis中动态去循环读取 advancesearchlist 集合中的json对象,并根据 json对象中的 searchtype 做不同的处理,需要在 foreach 中嵌套 if 标签进行判断使用。
大体格式
<foreach collection="advancesearchlist" item="item" index="index" > <if test="xxx == 10 "> and abc like concat('%', ddd, '%') </if> </foreach>
因为当前 foreach 中获取到的 item 是一个json对象,涉及到在 if 标签中获取当前对象中指定属性的值,一时脑抽,没有想起来取值办法,咨询万能的度娘没有得到满意的回复,经过自己傻瓜式的尝试,终于找到了取值方法,特此记录下:
解决办法
mybatis 在 foreach 标签中使用 if 标签获取对象属性方法:
直接通过 对象.属性 的方式获取!!!!对,你没看错,就是直接通过 对象.属性 的方式获取!!!
例如:当前foreach 循环获取的对象是 item,想要获取对象中的 searchtype ,直接就是 item.searchtype 即可……
代码如下
<foreach collection="advancesearchlist" item="item" index="index" > <if test="item.searchtype == 10 "> and abc like concat('%', #{item.searchtext}, '%') </if> </foreach>
mybatis if 语句嵌套
在使用mybatis的时候,可以在 if 标签下面加上if标签。
比如要对这个sql语句进行改进。
select a.* from emp a inner join dept b on a.deptno = b.no where b.place= #{place}
要求
如果 传入的 地点 是 north korea 那么 符合 a中的条件也可以。
a.male = 'm' or a.age bewteen 20 and 30
where语句可以这么写
select * from emp e <where> <if test="_parameter.place != null and _parameter.place != '' "> and <if test="_parameter.place == 'north korea' "> ( </if> b.place = #{place} <if test="_parameter.place == 'north korea' "> or a.male = 'm' or a.ge between 20 and 30 ) </if> </if> </where>
注意里面的括号。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。