Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

(1)问题描述

这周工作中,公司的项目使用mybatis和pagehelper进行分页查询,启动工程,查询数据居然报错了,报错内容如下:

Exception in thread “main” org.apache.ibatis.plugin.PluginException: Could not find method on interface org.apache.ibatis.executor.Executor named query. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler, org.apache.ibatis.cache.CacheKey, org.apache.ibatis.mapping.BoundSql)

Exception in thread "main" org.apache.ibatis.plugin.PluginException: Could not find method on interface org.apache.ibatis.executor.Executor named query. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler, org.apache.ibatis.cache.CacheKey, org.apache.ibatis.mapping.BoundSql)
	at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:63)
	at org.apache.ibatis.plugin.Plugin.wrap(Plugin.java:26)
	at com.github.pagehelper.PageInterceptor.plugin(PageInterceptor.java:151)
	at org.apache.ibatis.plugin.InterceptorChain.pluginAll(InterceptorChain.java:12)
	at org.apache.ibatis.session.Configuration.newExecutor(Configuration.java:289)
	at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:78)
	at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:32)
Caused by: java.lang.NoSuchMethodException: org.apache.ibatis.executor.Executor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler, org.apache.ibatis.cache.CacheKey, org.apache.ibatis.mapping.BoundSql)
	at java.lang.Class.getMethod(Class.java:1786)
	at org.apache.ibatis.plugin.Plugin.getSignatureMap(Plugin.java:60)

想了半天没想明白哪里出了问题,然后无意间查看到pagehelper的底层源码,发现居然有报错的地方,如下所示:

Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.

 然后进入query()方法,跳转到了mybatis框架的源码中,发现mybatis框架中这个方法只有四个参数,而pagehelper中使用的是有六个参数的query()方法,所以导致报错。

Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.

 那问题的根据就知道,肯定是mybatis框架和pagehelper的版本不匹配导致的。我查看公司项目使用的mybatis版本是3.0.4的,pagehelper版本是5.0.0的。那解决就简单了,更换对应的框架版本即可。

(2)解决方案

两种方式解决:

  • 更换mybatis和pagehelper对应的版本(这是最简单的方式)
  • 不使用pagehelper插件,自定义mybatis分页插件

1、方式一:更换mybatis版本

我查看pagehelper依赖仓库, 发现pagehelper最低支持mybatis 3.2.6版本的。

Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.

 2、自定义mybatis分页插件

我们公司使用的那个mybatis3.0.4版本,当时技术经理还特意告诉我,如果是依赖版本的问题,那么pagehelper的依赖可以随意更换,但是mybatis依赖版本不能更换。啊呀,我一想那不是只能自定义mybatis分页插件啦。。。。没办法啦,只能查看一些自定义分页插件的文章,然后自己写一个了。如果有需要的可以查看【Mybatis实现自定义分页插件】文章。

Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query. 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134782.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!