问题描述。

在学习网上流传的电商项目,项目也比较老了,在对mybatis分页的时候使用的是pagehelper。在最初搭建项目的时候,我没有使用教程中给的本地maven,而是直接从网上拉取包。教程中pagehelper使用的版本号是:< pagehelper.version >3.4.2fix< /pagehelper.version >,当时一直下载不下来(后来才知道fix是教程中老师自己修改过的),就直接去github找到了最新的版本5.0.4进行使用。

结果在进行分页的时候问题来了:

出现了如下错误,意思是没有实现mybatis的Interceptor:

Caused by: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
at org.apache.ibatis.builder.xml.XMLConfigBuilder.pluginElement(XMLConfigBuilder.java:142)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:100)
… 39 more


Interceptor实现位置修改。

教程中这一部分说的是,pagepelper在mybatis的Executor和MappedStatement中间实现了mybatis的Interceptor接口,为sql语句添加了limit语句,所以才可以进行分页处理。需要在SqlMapConfig.xml中配置如下内容从而支持插件:

使用的是PageHelper这个类作为拦截器的,但是错误中有说这个类并不能映射到Interceptor中,那也就是说该类并没有实现Interceptor。然后查看了一下该类:

发现确实并没有实现Interceptor,既然该类并没有实现拦截器,但是想要实现分页也只能通过实现Interceptor才行,那么只能够说明随着版本的不同,拦截器的工作不再是PageHelper类执行了。然后在下面就看到了PageInterceptor这个类:

很显然,PageInterceptor接替了PageHelper的拦截工作,在这个版本中由PageInterceptor进行拦截实现分页。

我有特地的下载了3.4.2的版本,发现在当时的版本中PageHelper确实实现了Interceptor:

修改了SqlMapConfig.xml 中拦截器的类,将其配置为新版本的PageInterceptor:

然后这样的配置也并不能使用。


dialect加载问题。

结果又出现了没有找到mysql的错误:

网上说这个版本的已经不需要了设置dialect了,因为在之前的版本中PageHelper是这样设置数据库的:

在PageHelper中设置数据库方言的名称:

然后在SqlUtil中设置了一个枚举类型,检测是哪种数据库:

然后根据不同的数据库创建不同的解析器:

就算解析器创建失败之后,也会重新创建:

除非使用了不在枚举范围内的方言,否则就会根据SqlMapConfig.xml中的dialect创建成功。

但是在新版本中,如果设置了dialect属性,那么会使用Class.forName来直接进行加载:

很显然是不存在mysql这个类的,并且是直接抛出异常。

如果去掉SqlMapConfig.xml中的dialect属性,那么就会默认创建一个PageHelper实例:

而在这个版本中的PageHelper是会自动加载dialect的:

所以说在5.0.4版本中在SqlMapConfig.xml中是不需要添加dialect属性的,因为会根据这个属性对应的值前去直接创建类,所以才会抛出找不到mysql类的异常。

如果将dialect设置为一个存在的类会发生什么?比如将其设置常用的驱动名称:

这个倒是能够创建成功,但是并不能将其转换为官方的Dialect类,所以还是会抛出异常:

所以说是没必要设置dialect的值的,如果非要设置的话就需要写一个实现了Dialect接口的类的名称:

注意:这样虽然不会报错,但是却并没有起到分页的作用!!!,因为这样的话就没有创建PageHelper,而我们的分页代码实在PageHelper中设置的,所以如果设置dialect的话,就只能设置为:PageHelper的名称了:com.github.pagehelper.PageHelper

PageHelper设置分页:

分页无效,输出全部内容:

设置为:com.github.pagehelper.PageHelper之后成功调用:

PageHelper版本差异造成的Interceptor和dialect问题。相关推荐

  1. tensorflow r1.5 版本差异调研

    原文:http://blog.csdn.net/SuperYR_210/article/details/78977588 tensorflow r1.5 版本差异调研 一.Breaking Chang ...

  2. python版本差异_npm install报错,不知道是系统差异还是node版本差异,跟python有关系?...

    源自:1-3 项目安装 npm install报错,不知道是系统差异还是node版本差异,跟python有关系? > gmsmith@0.1.3 preinstall D:\code\imooc ...

  3. 手机比较版本差异工具

    CompareVersionDiff 导出每个手机版本的里面apk.property.xml配置,然后对比2个不同的版本之间的差异,来确认是否有非预期的修改被带入 背景: 手机项目开发进入后期,相关的 ...

  4. ElasticSearch之SpringData集成版本差异

    文章目录 1. 版本差异 2. ElasticsearchRestTemplate 2.1 Spring-data-elasticsearch:4.0.5 2.2 Spring-data-elasti ...

  5. Unity各版本差异

    Unity各版本差异 version  unity  5.x  4.x  2017  差异  特点  首先放出unity的下载地址,然后再慢慢分析各个版本.再者unity可以多个版本共存,只要不放在同 ...

  6. OpenCV各版本差异与演化,从1.x到4.0

    最近因项目需要,得把OpenCV捡起来,登录OpenCV官网,竟然发现release了4.0.0-beata版本,所以借此机会,查阅资料,了解下OpenCV各版本的差异及其演化过程,形成了以下几点认识 ...

  7. 关于poi版本差异问题!

    原文链接:关于poi版本差异问题! | Elvin 最近在工作时需要做一个导入导出的功能,出现了几个问题,记录一下 环境为poi3.+版本到poi4.+的过渡 问题一 poi读取Excel2003版本 ...

  8. BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法

    最近一直在做互金平台,做到后台提交表单的时候出现验证提交数据一直没有提交的问题.于是百度了一下.果然是版本问题造成的.幸好找到了问题所在.我一直仿照的是东钿原微信平台的做法,但是使用byond的后台框 ...

  9. Codeigniter 4基础教程(2)-- 版本差异,模板,一个form例子

    0.版本差异 Codeigniter 4 与Codeigniter 3差异比较大,比如v3中的 $this->load->view('hello'); 就会报错. 另外,开发过程中,建议开 ...

最新文章

  1. 【译】Object Dumper: 函数式程序设计编码中的强大工具
  2. shell脚本之nginx的安装
  3. Exercise Physiology (运动生理学)
  4. 社会阶层及由此引起的社会动力学现象
  5. Intel Realsense D435 如何通过摄像头序列号重置hardware_reset()摄像头?
  6. java中this.value_java中关键字this的用法
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1101:不定方程求解
  8. 电子技术基础数字部分第六版_大部分数字图书馆技术特点与应用分析
  9. 从python入门到放弃_《Python3从入门到放弃》视频教程
  10. 监控zabbix 服务并在异常时python 邮件报警
  11. 2015职称计算机考试模拟,2015职称计算机考试《Dreamweaver》模拟试题(9)
  12. PTN OAM交互接口设计
  13. 通俗易懂理解JAVA虚拟机
  14. hencoder学习自定义view(1)
  15. PTES执行内容思维导图
  16. JavaWeb学习--课程设计《小米商城》
  17. Verilog语言、语法
  18. python中一切都是对象对吗_在 Python 中一切皆对象,它完全支持()
  19. Windows API函数大全---附:windows运行命令详解
  20. 图像处理:U-Net中的重叠-切片(Overlap-tile)

热门文章

  1. LoG高斯拉普拉斯算子介绍
  2. 网站服务器速度变慢的原因,网站打开速度慢的原因,你知道吗?
  3. Push 的工作机制
  4. 【语音识别】基于BP神经网络0到10数字语音识别含Matlab源码
  5. 老式台式计算机,浅析老式台式电脑用Win7好还是win10系统好?
  6. 两个非常好的 ios 资料站: http://ui4app.com/ http://code4app.com/
  7. 基于Android的健康食谱菜谱app
  8. 全球及中国卤素灯行业商业模式分析及投资风险预测2022年版
  9. 中国城市综合体行业研究现状分析及未来前瞻报告2022-2028年
  10. 线性代数笔记(6):内积空间(上)