org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: com.jd.jmq.data.model.Metric$Aggregator and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: com.jd.jmq.data.model.Metric$Aggregator and java.lang.String
表面上看是因为类型不符合, 但是想了想, 枚举类型默认可以自动转字符串的,以及mapper中jdbcType都没问题啊. 而且完全一样的东西在原工程中是完全正常的. 既然都是一样的代码, 那就找找俩工程有啥不一样的吧。
首先是MySQL jar版本不同. 换成原工程中的版本也无效. 然后是mybatis jar版本不一样, 换成原工程中的版本问题就解决了!
原工程中配置的是mybatis-3.2.8, 而我测试工程中用的是mybatis-3.3.1.后来在网上找了一下才知道了原因:
原来这是mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了。有时不必要的判断反而是地雷。以后凡是遇到mybatis中的转换错误的,一定要仔细审清错误,这样才能定位原因,多半是由于代码上的问题,看看是不是空指针了等等。不要上来就定位到版本或者框架的问题,一旦陷入错误思路很难解决问题。
错误范例:
<if test="type != null and type!=''">type = #{type},</if>
正确范例:
<if test="type != null">type = #{type},</if>
欢迎工作一到五年的Java工程师朋友们加入Java技术交流群:659270626
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!