Mybatis日期检索格式报错

问题复现

bash 复制代码
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String

问题分析

看起来问题是因为查询的时候尝试将数据库中的日期(start_time)与字符串(startTime)进行比较,导致了 "java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String" 错误。

html 复制代码
------------------原Mybatis语句
 <if test="startTime != null and startTime != '' ">and chat.start_time = #{startTime}</if>
html 复制代码
------------------修复后Mybatis语句
   <if test="startTime != null "> and DATE_FORMAT(chat.start_time, '%Y-%m-%d')=DATE_FORMAT( #{startTime}, '%Y-%m-%d')</if>

问题反思

遇到的问题是由于 MyBatis 试图将数据库中的日期(chat.start_time)与字符串(startTime)进行比较,从而导致了 "java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String" 错误。通过将 startTime 参数直接与数据库中的日期进行比较,并使用 DATE_FORMAT 函数将它们都格式化为相同的日期字符串,您成功地解决了此问题。这样的修改是有效的,因为它确保了在比较时两者都具有相同的格式,因此不再引发类型不匹配的异常。现在查询将 chat.start_timestartTime 参数的日期字符串进行比较,这是一个可行的方法,前提是这两者的格式匹配。

相关推荐
陈文锦丫5 小时前
MQ的学习
java·开发语言
乌暮5 小时前
JavaEE初阶---线程安全问题
java·java-ee
爱笑的眼睛115 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
Seven976 小时前
剑指offer-52、正则表达式匹配
java
代码or搬砖6 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
青蛙大侠公主6 小时前
Thread及其相关类
java·开发语言
Coder_Boy_6 小时前
DDD从0到企业级:迭代式学习 (共17章)之 四
java·人工智能·驱动开发·学习
2301_768350236 小时前
MySQL为什么选择InnoDB作为存储引擎
java·数据库·mysql
派大鑫wink6 小时前
【Java 学习日记】开篇:以日记为舟,渡 Java 进阶之海
java·笔记·程序人生·学习方法