好得很程序员自学网

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

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

mybatis报错:

?

1

caused by: org.apache.ibatis.ognl.parseexception: encountered " " and [] at line 1

错误代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

<select id= "selectaccountlist" resultmap= "baseresultmap" >

   select ct.customer_name customername,sam.city_code,sam.user_name,sam.account_name

  from sys_account_manager sam left join sys_customer ct on ct.id = sam.customer_id

   where sam.deleted = 0

   < if test= "customername != null and customername != '' " >

   and ct.customer_name like concat( '%' ,#{customername}, '%' )

   </ if >

   < if test= "citycode != null and citycode != '' " >

   and locate(#{citycode},sam.city_code)

   </ if >

   order by status,account_validity_time desc

  </select>

正确代码:

原因是:

if条件中and为大写,大写不能识别,应改为小写。

?

1

2

3

4

5

6

7

8

9

10

11

12

<select id= "selectaccountlist" resultmap= "baseresultmap" >

   select ct.customer_name customername,sam.city_code,sam.user_name,sam.account_name

  from sys_account_manager sam left join sys_customer ct on ct.id = sam.customer_id

   where sam.deleted = 0

   < if test= "customername != null and customername != '' " >

   and ct.customer_name like concat( '%' ,#{customername}, '%' )

   </ if >

   < if test= "citycode != null and citycode != '' " >

   and locate(#{citycode},sam.city_code)

   </ if >

   order by status,account_validity_time desc

  </select>

补充:mybatis中if判断遇到的坑

最近在项目开发的过程中,遇到了mybatis的一个坑(也许是mybatis有意这样设计的),对于integer或者long这种引用数据类型,在做if判断的时候,如果引用数据类型为0,则mybatis将会视为][空字符串,所以走不进判断逻辑里。

以下余额字段为long类型,availableamount值为0时,将走不进判断方法内的示例截图:

解决方法:

在test判断条件中添加]or availableamount==0[即可,以下是示例截图:

或者在业务场景允许的情况下,只判断availableamount!=null

?

1

2

3

< if test= "availableamount!=null" >

   ...

</ if >

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

原文链接:https://blog.csdn.net/weixin_39093006/article/details/91041819

查看更多关于解决mybatis where-if中if不能识别大写AND,OR的问题的详细内容...

  阅读:15次