日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • private?Date?createTime;??

  • 對應該屬性數據庫中定義的是

    ?

    [sql]?view plain?copy
  • create_time?datetime??

  • ?


    mapper中該屬性映射的定義

    ?

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

  • ?


    以下是mapper中對應Dao方法SQL語句

    ?

    [html]?view plain?copy
  • <select?id="selectByCreateTime"?resultMap="userMap">??
  • ??select?*?from?user???
  • ??<where>??
  • ????<if?test="createTime?!=?null?and?createTime?!=''?"?>??
  • ??????date(create_time)?=?date(#{createTime,jdbcType=TIMESTAMP})??
  • ????</if>??
  • ??</where>??
  • </select>??

  • 其中date()函數只是用來把年月日時分秒的日期截取為年月日, 這個對于該異常沒有任何影響

    在測試類中創建實體并為其屬性賦值

    ?

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

  • ?

    然后執行查詢方法dao.selectByCreateTime(user)的時候就報錯了

    ?

    [java]?view plain?copy
  • Exception?in?thread?"main"?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??
  • ????at?org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)??
  • ????at?org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:122)??
  • ????at?org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:113)??
  • ????at?org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:122)??
  • ????at?org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:64)??
  • ????at?org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)??
  • ????at?com.sun.proxy.$Proxy0.selectByCreateTime(Unknown?Source)??
  • ????at?mybatis.Test.buyerInfoTimeTest(Test.java:53)??
  • ????at?mybatis.Test.main(Test.java:39)??
  • Caused?by:?java.lang.IllegalArgumentException:?invalid?comparison:?java.util.Date?and?java.lang.String??
  • ????at?org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:92)??
  • ????at?org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:142)??
  • ????at?org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:794)??
  • ????at?org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:53)??
  • ????at?org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)??
  • ????at?org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)??
  • ????at?org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)??
  • ????at?org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)??
  • ????at?org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)??
  • ????at?org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:494)??
  • ????at?org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:458)??
  • ????at?org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)??
  • ????at?org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)??
  • ????at?org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)??
  • ????at?org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)??
  • ????at?org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)??
  • ????at?org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)??
  • ????at?org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)??
  • ????at?org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:280)??
  • ????at?org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:80)??
  • ????at?org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:120)??
  • ????...?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
  • <if?test="createTime?!=?null?and?createTime?!=''?"?>??
  • ??date(create_time)?=?date(#{createTime,jdbcType=TIMESTAMP})??
  • </if>??
  • ?

    改為

    ?

    [html]?view plain?copy
  • <if?test="createTime?!=?null">??
  • ??date(create_time)?=?date(#{createTime,jdbcType=TIMESTAMP})??
  • </if>??
  • 轉載于:https://www.cnblogs.com/libin6505/p/8567138.html

    總結

    以上是生活随笔為你收集整理的mybatis异常invalid comparison: java.util.Date and java.lang.String的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。