mybatis异常invalid comparison: java.util.Date and java.lang.String

 

原文链接:http://blog.csdn.net/wanghailong_qd/article/details/50673144

mybatis异常invalid comparison: java.util.Date and java.lang.String

开发中改动mapper文件后需要重新编译发布, 由于工程比较大非常耗时, 所以为方便快速测试干脆写了一个小java工程. 工程中用到的dao, mapper和实体类都是从工程中拷出来的, 数据库也是同一个. 但是遇到一个比较奇怪的问题

 

实体类中有一个属性

 

[java] view plain copy
  1. private Date createTime;  

对应该属性数据库中定义的是

 

[sql] view plain copy
  1. create_time datetime  

 


mapper中该属性映射的定义

 

[html] view plain copy
  1. <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />  

 


以下是mapper中对应Dao方法SQL语句

 

[html] view plain copy
  1. <select id="selectByCreateTime" resultMap="userMap">  
  2.   select * from user   
  3.   <where>  
  4.     <if test="createTime != null and createTime !='' " >  
  5.       date(create_time) = date(#{createTime,jdbcType=TIMESTAMP})  
  6.     </if>  
  7.   </where>  
  8. </select>  

其中date()函数只是用来把年月日时分秒的日期截取为年月日, 这个对于该异常没有任何影响

在测试类中创建实体并为其属性赋值

 

[java] view plain copy
  1. User user=new User();  
  2. user.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").parse("2016-01-18"));  

 

然后执行查询方法dao.selectByCreateTime(user)的时候就报错了

 

[java] view plain copy
  1. Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String  
  3. ### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String  
  4.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)  
  5.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:122)  
  6.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:113)  
  7.     at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:122)  
  8.     at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:64)  
  9.     at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)  
  10.     at com.sun.proxy.$Proxy0.selectByCreateTime(Unknown Source)  
  11.     at mybatis.Test.buyerInfoTimeTest(Test.java:53)  
  12.     at mybatis.Test.main(Test.java:39)  
  13. Caused by: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String  
  14.     at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:92)  
  15.     at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:142)  
  16.     at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:794)  
  17.     at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:53)  
  18.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)  
  19.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)  
  20.     at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)  
  21.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)  
  22.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)  
  23.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:494)  
  24.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:458)  
  25.     at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)  
  26.     at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)  
  27.     at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)  
  28.     at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)  
  29.     at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)  
  30.     at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)  
  31.     at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)  
  32.     at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:280)  
  33.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:80)  
  34.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:120)  
  35.     ... 7 more  


看样子是因为类型不符合, 但是想了想, Date类型对应MySQL的datetime, 以及mapper中jdbcType都没问题啊. 而且完全一样的东西在原工程中是完全正常的. 既然都是一样的代码, 那就找找俩工程有啥不一样的吧

 

 

首先是mysql jar版本不同. 换成原工程中的版本也无效. 然后是mybatis jar版本不一样, 换成原工程中的版本问题就解决了!

 

原工程中配置的是mybatis-3.2.8, 而我测试工程中用的是mybatis-3.3.0.后来在网上找了一下才知道, 原来这是mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了

 

 

[html] view plain copy
  1. <if test="createTime != null and createTime !='' " >  
  2.   date(create_time) = date(#{createTime,jdbcType=TIMESTAMP})  
  3. </if>  
 
 

 

改为

 

[html] view plain copy
  1. <if test="createTime != null">  
  2.   date(create_time) = date(#{createTime,jdbcType=TIMESTAMP})  
  3. </if>  

转载于:https://www.cnblogs.com/libin6505/p/8567138.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机c语言等级考试PDF,国家计算机等级考试c语言精华.pdf

心之所向&#xff0c;所向披靡C 语言总复习顺序结构程序设计1.单字符输入输出&#xff1a;getchar(字符变量) &#xff1b;putchar(字符变量) &#xff1b;2.字符串输入输出&#xff1a;gets(字符数组名),puts(字符数组名)。3.格式化输入输出&#xff1a;(1)格式化输入&#xf…

什么是内卷?华为内部这篇文章读懂

来源&#xff1a;互联网坊间八卦&#xff08;ID:kekesil&#xff09;内卷的意思是明明已经靠近边界有个天花板&#xff0c;但却又不断自我激发&#xff0c;繁复化、精致化。概念的含糊其辞是无效讨论和跌入焦虑自我再生产困境的原因之一。判断内卷还是良性竞争的前置问题是回答…

锁屏界面显示某些设置已隐藏_iOS 14 隐藏功能,只要轻点手机背面就能截屏

关于 iOS 14 系统的一些功能我也为大家介绍了一些&#xff0c;iOS 14 已发布&#xff0c;界面大更新&#xff01;其实除了之外&#xff0c;iOS 14 系统还有许多隐藏的功能。那么今天我就为大家介绍 iOS 14 系统的隐藏功能之一&#xff1a;轻点背面。话不多说&#xff0c;我们先…

jacascript AJAX 学习

前言&#xff1a;这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方&#xff0c;请大家指正&#xff0c;我会持续更新&#xff01; AJAX 是 asynchronous javascript and XML 的简写&#xff0c;就是异步的 javascript 和 XML。这一技术能够向服务器请求额外的数据而…

android 自定义控件 焦点,android中设置控件获得焦点

android中&#xff0c;要使控件获得焦点&#xff0c;需要先setFocus,再requestFocus。以Button为例&#xff1a;btn.setFocusable(true);btn.setFocusableInTouchMode(true);btn.requestFocus();btn.requestFocusFromTouch();//获得失去焦点的监听器btn.setOnFocusChangeListen…

分享丨强化学习是针对优化数据的监督学习?

来源&#xff1a;AI科技大本营作者 | Ben Eysenbach、Aviral Kumar、Abhishek Gupta 编译 | 凯隐出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;强化学习&#xff08;RL&#xff09;可以从两个不同的视角来看待&#xff1a;优化和动态规划。其中&#xff0c;诸如REI…

stm32l0的停止模式怎么唤醒_手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖...

手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖Synology群晖科技&#xff08;Synology &#xff09;创立于 2000 年&#xff0c;自始便专注于打造高效能、可靠、功能丰富且绿色环保的 NAS 服务器&#xff0c;是全球少数几家以单纯的提供网络存储解决方案获得世界认同的华人企…

pat 甲级 1034. Head of a Gang (30)

1034. Head of a Gang (30) 时间限制100 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueOne way that the police finds the head of a gang is to check peoples phone calls. If there is a phone call between A and B, we say that A and B is relat…

有人说 GPT3 是“暴力美学”的结晶,它的工作原理你知道吗?| 动图详解

来源&#xff1a;CSDN如今&#xff0c;在科技领域掀起了一股GPT3的热潮。大规模语言模型&#xff08;比如GPT3&#xff09;的潜力惊艳了我们。虽然这些模型还没有成熟到大多数企业将之直接面对消费者&#xff0c;但却展示出一些智慧的火花&#xff0c;并让人坚信其将会加速自动…

android的listview多选功能,Android ListView实现单选及多选等功能示例

本文实例讲述了Android ListView实现单选及多选等功能的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;在项目中也遇到过给ListView的item添加选择功能。比如一个网购APP&#xff0c;有个历史浏览页面&#xff0c;这个页面现点击item单选/多选及全选删除功能。当…

git 生成ssh key_ubuntu git生成ssh key (公钥私钥)配置github或者码云

Git是分布式的代码管理工具&#xff0c;远程的代码管理是基于SSH的&#xff0c;所以要使用远程的Git则需要SSH的配置。github的SSH配置如下&#xff1a;设置Git的user name和email&#xff1a;git config --global user.name "xx"git config --global user.email &qu…

ThinkPHP5模型操作中的自动时间戳总结

ThinkPHP5中提供了非常优秀的自动时间戳功能。使用起来非常方便。 但是官网手册中的说明还是不是很详尽&#xff0c;因此整理再次&#xff0c;以方便后续使用时查阅。 一、一般情况下的自动填充create_time,update_time两个字段 对于固定的时间戳和时间日期型的字段&#xff0c…

android圆形头像 demo,Android图像处理之绘制圆形头像

在Android中&#xff0c;绘制圆形和绘制图片都是很容易的事情&#xff0c;但是绘制圆形图片就有点难倒人了。以前为了偷懒就直接去github上找一个开源项目&#xff0c;后来才发现绘制圆形图片其实也是很简单的事。绘制圆形图片也需要两个步骤&#xff1a;绘制圆形和绘制图片&am…

芯片项目烂尾怎么办?国家发改委回应了!

来源&#xff1a;北京日报客户端芯片项目烂尾的报道近日引发关注。对此&#xff0c;国家发改委新闻发言人孟玮在今日&#xff08;20日&#xff09;上午举行的例行发布会上回应&#xff0c;将会同有关部门强化顶层设计&#xff0c;狠抓产业规划布局&#xff0c;努力维护产业发展…

idea中二级包为什么创建不了_IDEA通过Maven打包JavaFX工程(OpenJFX11)

1 概述 最近研究JFX&#xff0c;写出来了但是打包不了&#xff0c;这。。。尴尬。。。 IDEA的文档说只支持Java8打成jar包&#xff1a; 尝试过直接使用Maven插件的package&#xff0c;不行&#xff0c;也尝试过Build Artifacts&#xff0c;也不行&#xff0c;各种奇奇怪怪的问题…

鸿蒙系统发布会16号几点,华为鸿蒙手机系统正式定档发布,12月16日于我们见面...

#华为鸿蒙系统#大家都知道&#xff0c;华为手机已经无法预装谷歌GMS服务了&#xff0c;对于大部分海外用户来说&#xff0c;GMS服务还是相当重要的&#xff0c;谷歌全家桶内置了地图、搜索、视频娱乐等功能&#xff0c;但凡是搭载了安卓系统的智能手机&#xff0c;那么就无法离…

二叉树和红黑二叉树

二叉树是树形结构的一个类型&#xff0c;由一个根节点和左子树、右子树组成。排序二叉树特性&#xff1a;左子树上的值均小于根节点的值&#xff1b;右子树的值均大于根节点的值。&#xff08;相当于链表&#xff09;平衡二叉树任何节点的两个子树的最大高度差为1&#xff0c;被…

Gartner发布2021年重要战略科技趋势

来源&#xff1a;Gartner公司全球领先的信息技术研究和顾问公司Gartner于今日发布企业机构在2021年需要深挖的重要战略科技趋势。分析师们在本周举行的Gartner IT Symposium/Xpo大会美洲站虚拟会议上展示了自己的发现。Gartner研究副总裁Brian Burke表示&#xff1a;“各企业职…

html右侧分为两个框架,html – 两个框架一个滚动条

我正在尝试创建两个框架并使它们一起滚动,例如,如果页面顶部有更改的菜单栏 –我正在使用旋转木马 – 或底部的页脚,必须作为页面的一部分出现.我希望页面看起来像一个也能够滚动的页面,但页面实际上由两个框架组成.用这个……/p>"http://www.w3.org/TR/xhtml1/DTD/xht…

pause pod 什么是pod_Kubernetes 自主式Pod清单 干货太多先马住慢慢看

在讲资源清单之前&#xff0c;先给大家介绍一下究竟什么是Kubernetes资源&#xff1f;有几种资源&#xff1f;① 资源分类&#xff1a;① 1 工作负载&#xff1a;pod、rs(ReplicasSet)、deploy(Deployment)、sts(StatefulSet)、ds(DaemonSet)、job、cronjob① 2 服务发现及负…