好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

查看更多关于mybatis的动态sql之if test的使用说明的详细内容...

  阅读:21次