解决Mybatis中foreach嵌套使用if标签对象取值的问题
作者:_修铁路的 发布时间:2023-11-23 06:02:02
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>
注意里面的括号。
来源:https://blog.csdn.net/sinat_35626559/article/details/106252332
猜你喜欢
- 1、找准入口,使用ClassPathXmlApplicationContext的构造方法加载配置文件,用于加载classPath下的配置文件
- 一、文件存储特点:openFileInput()和openFileOutput()读取设备上的文件。优点:适用于存储大量的数据,可以存储图片
- 因为工作原因需要读取json文件,最先是使用url方式不符合要求pass。又使用本地方式读取。记录一下方便后期查看。 注:因为资料都是从网上
- 这篇文章主要介绍了SpringBoot如何读取war包jar包和Resource资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具
- 上一章节回顾:Netty分布式源码分析监听读事件概述pipeline, 顾名思义, 就是管道的意思, 在net
- 前言最近项目需要和Oracle数据库进行交互,然后我从Maven中央仓库下载数据库驱动jar包,但怎么都下不下来,我到Oracle官网上一看
- 概念Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。优点1.可以动态保存任意多个对象,使用比较方便。2.
- ThreadLocal简介变量值的共享可以使用public static的形式,所有线程都使用同一个变量,如果想实现每一个线程都有自己的共享
- 1.返回String“长度”方法你如何确定给定String的长度?java提供了一种称为“length()”的方法。将它用于您需要查找Str
- 介绍备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获并保存一个对象的内部状态,并在之后可
- 前言LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的
- 说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Spring + Spring MVC +Mybatis)框架,实现简
- 有时候,我们需要制作一个Word模板文档,然后发给用户填写,但我们希望用户只能在指定位置填写内容,其他内容不允许编辑和修改。这时候我们就可以
- Spring Cloud Gateway(以下简称 SCG)做为网关服务,是其他各服务对外中转站,通过 SCG 进行请求转发。在请求到达真正
- 导读Spring Boot应用可以使用spring-boot-maven-plugin快速打包,构建一个可执行jar。Spring Boot
- thymeleaf介绍简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP
- SSM Mapper查询出返回数据查不到个别字段原因开启了驼峰命名法则,Bean里的字段不识别_注释掉或者把实体类里的字段_去掉换位大写SS
- @ConditionalOnProperty作用及用法在spring boot中有时候需要控制配置类是否生效,可以使用@Conditiona
- 一、栈(Stack)1、什么是栈?栈其实就是一种数据结构 - 先进后出(先入栈的数据后出来,最先入栈的数据会被压入栈底)什么是java虚拟机
- 1、注解@PathVariable:将请求url中的占位符参数与控制器方法入参绑定起来(Rest风格请求)@RequestHeader:获取