关闭

Mybatis3.4.0不支持mybatis-spring1.2.5及以下版本

759人阅读 评论(0) 收藏 举报
分类:


今天将工程的Mybatis的版本由3.3.0升级到3.4.0导致程序运行错误,使用的mybatis-spring版本是1.2.3,错误内容如下,最后发现是SpringManagedTransaction类中没有getTimeout函数,所以导致这个错误出现。

  1. java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;  
  2.     at org.apache.ibatis.executor.BatchExecutor.doQuery(BatchExecutor.java:91)  
  3.     at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)  
  4.     at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)  
  5.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)  
  6.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)  
  7.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  8.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  9.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  10.     at java.lang.reflect.Method.invoke(Method.java:497)  
  11.     at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)  
  12.     at com.tianjunwei.page.PageInterceptor.intercept(PageInterceptor.java:87)  
  13.     at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)  
  14.     at com.sun.proxy.$Proxy19.query(Unknown Source)  
  15.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)  
  16.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  17.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  18.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  19.     at java.lang.reflect.Method.invoke(Method.java:497)  
  20.     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:408)  
  21.     at com.sun.proxy.$Proxy16.selectList(Unknown Source)  

接下来我们分析以下mybatis由3.3.0到3.4.0升级所发生的变化,我们看到报错的地方是BatchExecutor的doQuery方法。

mybatis 3.3.0源码如下:



mybatis 3.4.0源码如下:


通过上图我们看到,mybatis3.4.0下StatementHandler的prepare方法添加了一个timeout参数,并且这个参数是通过transaction获得的,在spring和mybatis结合使用时,transaction应该是SpringManagedTransaction,接下来我们分析一下mybatis-spring的SpringManagedTransaction类的不同。

在mybatis-spring的1.2.3中没有getTimeout函数

在mybatis-spring的1.3.0版本中有getTimeout函数



现在看来mybatis的3.4.0及以上版本只支持mybatis-spring1.3.0及以上版本(现在最新是1.3.0),居然出现了不兼容情况,官方好像并不打算去兼容,我们开发人员需要自己去注意了。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27450次
    • 积分:732
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:91篇
    • 译文:1篇
    • 评论:10条
    最新评论