mybatis的动态sql之if test的使用说明

参数为String,if test读取该参数代码

<select id="getMaxDepartId" parameterType="java.lang.String" resultType="java.lang.String">
    SELECT MAX(DEPART_ID) FROM T_P_DEPART
    <where>
      <if test="_parameter!=null and _parameter!=''">
        AND DEPART_PID = #{departId,jdbcType=VARCHAR}
      </if>
      <if test="_parameter==null or _parameter==''">
        AND DEPART_PID IS NULL
      </if>
    </where>
  </select>

参数为pojo , if test读取该参数代码

<select id="findShopByName" parameterType="ShopVo" resultType="ShopCustomer">
  select * from shop
  <where>
      <if test="shopCustomer.shopname!=null and shopCustomer.shopname!=''">
        shop.shopname like '%${shopCustomer.shopname}%'
      </if>
      <if test="shopCustomer.shopname==null or shopCustomer.shopname==''">
        AND shop.shopname is null
      </if>
  </where>
</select>

补充:关于mybatis中 if test的条件怎么写

1.mybatis 中 的 if test写法

1.1官方文档上对于if是这么写的

<if test="title != null">
  AND title like #{title}
</if>

参考官方文档:

实际项目中会有这种情况: 页面上title字段输入某个值进行查询,手动将输入框中的值删除,然后再次查询,发现结果不正确,究其原因是应为title传入了空串" " 这样在mybatis配置文件中就会用空串进行查询,导致出现错误结果

1.2建议写法

<if test="title != null and title != ''" >
  AND title like #{title}
</if>

2.使用mybatis 做修改时将字段置空

if中如果传入的参数如果为空,那么将不会执行if中的语句

解决办法:

<update id="updateObject" parameterType="*.*.Object" >
update table
 <set>
  <if test="Object.fullName == null or Object.fullName ==''">
  full_name = null,
  </if>
  <if test="Object.fullName != null and Object.fullName !=''">
  full_name = #{companyOrg.fullName},
  </if>
  <if test="Object.level == null or Object.level ==''">
  level = null,
  </if>
  <if test="Object.level == 0 ">
  level = null,
  </if>
  <if test="Object.level != null and Object.level !='' and Object.level != 0 ">
  level = #{companyOrg.level},
  </if>

 </set>
 where 1=1 and id =#{companyOrg.id}
</update>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

时间: 2021-02-02

在mybatis 中使用if else 进行判断的操作

我就废话不多说了,大家还是直接看代码吧~ <!-- 查询物品的id --> <select id="checkItemsId" parameterType="pd" resultType="java.lang.Integer"> SELECT i.itemsid FROM pq_goods_items i <where> <!--方式一使用choose的方式查询--> <!-- <cho

Mybatis 动态sql if 判读条件等于一个数字的案例

在Mybatis中 mapper中 boolean updateRegisterCompanyFlag(@Param(value = "companyId") String companyId, @Param(value = "flag") String flag); 传入的flag类型为String,但在mapper.XML中进行判断是下意识地以为判断的值要加上引号 <if test=" '4' == flag "> , LAST_

mybatis通过if语句实现增删改查操作

有时候为了简化我们的代码. 1 举个例子 Student类: @Data public class Student { private Integer id; private Integer age; private Integer sno; } 有时候我们想通过age这个属性获取Student对象 有时候我们也想通过sno这个属性获取Student对象 难道我们在DAO层写两个接口? 比如这样子? Student getStudentByAge(Int age); Student getStu

解决mybatis where-if中if不能识别大写AND,OR的问题

mybatis报错: Caused by: org.apache.ibatis.ognl.ParseException: Encountered " "AND "" at line 1 错误代码: <select id="selectAccountList" resultMap="BaseResultMap"> SELECT ct.customer_name customerName,sam.city_code,s

mybatis的if判断不要使用boolean值的说明

mybatis的if判断里面最好不要使用boolean值: mybatis会默认把空值转为false.所以如果遇见前段传空值,这个字段在mybatis里面永远就是false了, 可以使用数字类型代替,但是不要使用0作为参数: 补充知识:[MyBatis]<if test=""></if>标签的条件判断(Boolean类型参数) 在MyBatis 中,动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似. 在 MyBatis 3 之前的版本中,有很

在mybatis中使用mapper进行if条件判断

目的: 在使用mybatis框架中mapper文件有自动生成,但有时需要自己添加sql语句进行开发,当遇到需要使用 if进行条件判断的时候该怎么写? 查询sql语句如下: <select id="queryData" parameterType="com.pojo.QueryDetailReq" resultType="com.pojo.MxDataInfo"> select * from db_trd.tb_trd_secu_ord

es6中使用map简化复杂条件判断操作实例详解

本文实例讲述了es6中使用map简化复杂条件判断操作.分享给大家供大家参考,具体如下: 复杂逻辑判断时需要写很多if/else,代码可读性较差,可以用es6新增的Map来简化代码 列举六种实例,逐步简化 /** * 按钮点击事件 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消 */ const onButtonClick = (status) => { if (status == 1) { sendLog('pr

全面掌握Java中的循环控制语句与条件判断语句的使用

循环控制 可能存在一种情况,当我们需要执行的代码块数次,通常被称为一个循环. Java有非常灵活的三循环机制.可以使用以下三种循环之一: while 循环 do...while 循环 for 循环 截至Java5,对增强的for循环进行了介绍.这主要是用于数组. while 循环 while循环是一个控制结构,可以重复的特定任务次数. 语法 while循环的语法是: while(Boolean_expression) { //Statements } 在执行时,如果布尔表达式的结果为真,则循环中

Mybatis中Mapper标签总结大全

一.标签分类 定义SQL语句 insert delete update select 配置关联关系 collection association 配置java对象属性与查询结果集中列名的对应关系 resultMap 控制动态SQL拼接 foreach if choose 格式化输出 where set trim 定义常量 sql 其他 include 二.标签总结 1. 基础SQL标签 1.1 查询select 标签属性 id 唯一的名称,对应dao中mapper的接口名称 paramterTy

Mybatis中通过generator生成mapper、Dao、mapper.xml的方法

1.将如下东西复制到项目中,或某一个文件夹. 2.更改generator.xml (1)更改数据驱动包的位置,选择你所安装的目录: (2)更改你所要连接的数据库的名称,数据库的user和password (3)更改下图 targetPakage的地方,targetProject的地方,这里targetProject所在的地方一定要存在 要不然会报错 (4)在tableName中填写你所要填写的表名.domainObjectName填写你想要生成的名字. 3.进入命令行窗口运行: 1.进入项目 的

Mybatis中Mapper映射文件使用详解

紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

mybatis 中 foreach collection的用法小结(三种)

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. item表示集合中每一个元素进行迭代时的别名,     index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,     open表示该语句以什么开始,     separator表示在每次进行迭代之间以什么符号作为分隔 符,     close表示以什么结束. 在使用foreach的时候

Mybatis中的延迟加载案例解析

一.延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 在mybatis核心配置文件中配置: lazyLoadingEnabled.aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置

深入浅出MyBatis中映射文件和实体类的关联性

mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间.维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~~: 以User对象和UserMap.xml为例讲解,代码如下: User为用户实体类(仅作为讲解,可以只关注引用类型变量,get/set方法省略): import com.google.common.collect.Lists; import com.gukeer.common.persisten

mybatis中批量插入的两种方式(高效插入)

MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 一.mybiats foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主

Mybatis中动态SQL,if,where,foreach的使用教程详解

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) trim where set foreach mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.statement中直接定义使用动态SQL: 在statement中利用if 和 where 条件组合达到我们的需求,通过一个例子来说明: 原SQL语句