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

 更新时间:2021年02月03日 17:03:39   作者:李大白白  
这篇文章主要介绍了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>

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

相关文章

  • 与众不同的 Java 日期格式化大全

    与众不同的 Java 日期格式化大全

    这篇文章主要介绍了与众不同的 Java 日期格式化大全,在 Java 中,经常要将时间字符串转换为日期,或者要将日期转换为时间字符串。,需要的朋友可以参考下
    2019-06-06
  • SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作
    2009-06-06
  • Java Socket编程简介_动力节点Java学院整理

    Java Socket编程简介_动力节点Java学院整理

    这篇文章主要介绍了Java Socket编程简介的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • 如何让Spring Rest 接口中路径参数可选

    如何让Spring Rest 接口中路径参数可选

    这篇文章主要介绍了如何让Spring Rest 接口中路径参数可选,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Struts2学习笔记(4)-通配符的使用

    Struts2学习笔记(4)-通配符的使用

    本文主要介绍Struts2中通配符的使用,简单实用,希望能给大家做一个参考。
    2016-06-06
  • 五分钟教你手写 SpringBoot 本地事务管理实现

    五分钟教你手写 SpringBoot 本地事务管理实现

    这篇文章主要介绍了五分钟教你手写 SpringBoot 本地事务管理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Java8如何通过Lambda处理List集合

    Java8如何通过Lambda处理List集合

    这篇文章主要介绍了java8如何通过Lambda处理List集合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • SpringBoot项目解决跨域的四种方案分享

    SpringBoot项目解决跨域的四种方案分享

    在用SpringBoot开发后端服务时,我们一般是提供接口给前端使用,但前端通过浏览器调我们接口时,浏览器会有个同源策略的限制,即协议,域名,端口任一不一样时都会导致跨域,这篇文章主要介绍跨域的几种常用解决方案,希望对大家有所帮助
    2023-05-05
  • java Long类型转为json后数据损失精度的处理方式

    java Long类型转为json后数据损失精度的处理方式

    这篇文章主要介绍了java Long类型转为json后数据损失精度的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 一文详解Java抽象类到底有多抽象

    一文详解Java抽象类到底有多抽象

    这篇文章主要介绍了一文详解Java抽象类到底有多抽象,抽象方法所在的类必须是抽象类,子类若继承了一个抽象类,就必须覆写父类的所有抽象方法,这里的子类是普通类,是强制要求覆写所有抽象方法,但是如果子类也是一个抽象类,那么就可以不覆写
    2022-06-06

最新评论