解决mybatis where-if中if不能识别大写AND,OR的问题
时间:2021-06-13 08:41:32|栏目:JAVA代码|点击: 次
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,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为大写,大写不能识别,应改为小写。
<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
<if test="availableAmount!=null"> ... </if>
栏 目:JAVA代码
下一篇:Java读写.properties文件解决中文乱码问题
本文标题:解决mybatis where-if中if不能识别大写AND,OR的问题
本文地址:http://www.codeinn.net/misctech/140849.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




