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

 更新时间:2022年02月08日 08:59:11   作者:_修铁路的  
这篇文章主要介绍了解决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, '%')
            </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>

注意里面的括号。

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

相关文章

  • spring boot使用自定义配置的线程池执行Async异步任务

    spring boot使用自定义配置的线程池执行Async异步任务

    这篇文章主要介绍了spring boot使用自定义配置的线程池执行Async异步任务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Springboot如何实现对配置文件中的明文密码加密

    Springboot如何实现对配置文件中的明文密码加密

    这篇文章主要介绍了Springboot如何实现对配置文件中的明文密码加密问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 彻底搞定堆排序:二叉堆

    彻底搞定堆排序:二叉堆

    二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值
    2021-07-07
  • java使用Logback配置输出日志内容到文件示例代码

    java使用Logback配置输出日志内容到文件示例代码

    这篇文章主要介绍了java Logback输出日志内容到文件,要将logger.info的信息输出到文件,您可以使用Logback配置,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 解决SpringBoot使用devtools导致的类型转换异常问题

    解决SpringBoot使用devtools导致的类型转换异常问题

    这篇文章主要介绍了解决SpringBoot使用devtools导致的类型转换异常问题,具有很好的参考价值,希望对大家有所帮助。 一起跟随小编过来看看吧
    2020-08-08
  • 如何通过Java实现PDF转高质量图片

    如何通过Java实现PDF转高质量图片

    在Java中,将PDF文件转换为高质量的图片可以使用不同的库,其中最常用的库之一是 Apache PDFBox,下面我们就来看看这个库的具体使用吧
    2024-10-10
  • zookeeper服务优化的一些建议

    zookeeper服务优化的一些建议

    今天小编就为大家分享一篇关于zookeeper服务优化的一些建议,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring的RequestBodyAdvice拦截浅析

    Spring的RequestBodyAdvice拦截浅析

    本文主要介绍了Spring的RequestBodyAdvice拦截浅析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • SpringBoot配置Redis实现保存获取和删除数据

    SpringBoot配置Redis实现保存获取和删除数据

    本文主要介绍了SpringBoot配置Redis实现保存获取和删除数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Spring Boot项目中遇到`if-else`语句七种具体使用方法解析

    Spring Boot项目中遇到`if-else`语句七种具体使用方法解析

    当在Spring Boot项目中遇到大量if-else语句时,优化这些代码变得尤为重要,因为它们不仅增加了维护难度,还可能影响应用程序的可读性和性能,以下是七种具体的方法,用于在Spring Boot项目中优化和重构if-else语句,感兴趣的朋友一起看看吧
    2024-07-07

最新评论