首页 > 软件编程 > java > foreach嵌套使用if标签对象取值问题

解决Mybatis中foreach嵌套使用if标签对象取值的问题

作者:_修铁路的

这篇文章主要介绍了解决Mybatis中foreach嵌套使用if标签对象取值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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, '%')
        </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}, '%')
        </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 != '' ">
    <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  )
</where>

注意里面的括号。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • Spring refresh()源码解析
    Spring refresh()源码解析
    2023-03-03
  • ThreadPoolExecutor参数的用法及说明
    ThreadPoolExecutor参数的用法及说明
    2023-03-03
  • JMeter断言之json断言解读
    JMeter断言之json断言解读
    2023-03-03
  • SpringBoot整合freemarker实现代码生成器
    SpringBoot整合freemarker实现代码生成器
    2023-03-03
  • mybatis in foreach 双层嵌套问题
    mybatis in foreach 双层嵌套
    2023-03-03
  • MybatisPlus字段类型转换的实现示例
    MybatisPlus字段类型转换的实现示例
    2023-03-03
  • idea中如何全局搜索class文件或者字符串
    idea中如何全局搜索class文件或者字符串
    2023-03-03
  • mybatis 查询方式与效率高低对比
    mybatis 查询方式与效率高低对比
    2023-03-03
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号