服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - mybatis的动态sql之if test的使用说明

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

2021-08-03 11:04李大白白 Java教程

这篇文章主要介绍了mybatis的动态sql之if test的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

 

?
1
2
3
4
5
6
7
8
9
10
11
<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读取该参数代码

 

?
1
2
3
4
5
6
7
8
9
10
11
<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是这么写的

?
1
2
3
<if test="title != null">
  AND title like #{title}
</if>

参考官方文档:

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

1.2建议写法

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

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

 

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

解决办法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<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>

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

原文链接:https://blog.csdn.net/a241903820/article/details/51607131

延伸 · 阅读

精彩推荐
  • Java教程并发编程之Semaphore原理与应用

    并发编程之Semaphore原理与应用

    控制并发流程的工具类,作用就是帮助我们程序员更容易的让线程之间合作,让线程之间相互配合来满足业务逻辑。比如让线程A等待线程B执行完毕后再执...

    今日头条2212020-11-30
  • Java教程Hibernate中load方法与get方法的区别

    Hibernate中load方法与get方法的区别

    Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的...

    mdxy-dxy4582020-03-20
  • Java教程Java中Properties类的操作实例详解

    Java中Properties类的操作实例详解

    这篇文章主要介绍了Java中Properties类的操作实例详解的相关资料,需要的朋友可以参考下...

    Java教程网3372020-09-18
  • Java教程java实现遍历Map的方法

    java实现遍历Map的方法

    这篇文章主要介绍了java实现遍历Map的方法,以简单实例形式分析了java针对HashMap的遍历技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    yenange2622020-01-04
  • Java教程详解Android中的Toast源码

    详解Android中的Toast源码

    这篇文章主要介绍了详解Android中的Toast源码,Toast使用Java语言实现,需要的朋友可以参考下 ...

    低调小一4312019-12-30
  • Java教程SpringBoot之LogBack配置详解

    SpringBoot之LogBack配置详解

    这篇文章主要介绍了SpringBoot之LogBack配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    WeYunx10682021-07-17
  • Java教程Java创建树形结构算法实例代码

    Java创建树形结构算法实例代码

    本篇文章主要介绍了Java创建树形结构算法实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    路伟4112020-07-30
  • Java教程java统计字符串单词个数的方法解析

    java统计字符串单词个数的方法解析

    在一些项目中可能需要对一段字符串中的单词进行统计,本文在这里分享了一个简单的demo,有需要的朋友可以拿去看一下...

    littleFatty4432020-07-21