本文共 2386 字,大约阅读时间需要 7 分钟。
PageHelper-5.1.1和PageHelper-4.0.0是有区别的
PageHelper-4.0.0的版本时,Mybatis全局配置文件SqlMapConfig.xml的内容是:当我PageHelper的版本改为5.1.1时,tomcat启动报错:
java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor这句报错信息说明PageHelper这个类没有实现Interceptor这个接口,我们看下源码:package com.github.pagehelper;import com.github.pagehelper.dialect.AbstractHelperDialect;import com.github.pagehelper.page.PageAutoDialect;import com.github.pagehelper.page.PageMethod;import com.github.pagehelper.page.PageParams;import com.github.pagehelper.util.StringUtil;import java.util.List;import java.util.Properties;import org.apache.ibatis.cache.CacheKey;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.session.RowBounds;public class PageHelper extends PageMethod implements Dialect { private PageParams pageParams; private PageAutoDialect autoDialect; public PageHelper() { }
PageHelper可以看到,这个类并没有实现Interceptor这个接口
在这里我们要了解下PageHelper在Mybatis中是如何工作的:通过mybatis的pulgin实现了Interceptor接口,从而获得要执行的sql语句实现分页技术,而我们的PageHelper5.1.1版本中的这个类,并没有出现implements Interceptor,找找pagehelper这个包下的其他类PageInterceptor类内容如下:package com.github.pagehelper;@Intercepts({@Signature( type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), @Signature( type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})})public class PageInterceptor implements Interceptor { protected CachemsCountMap = null; private Dialect dialect; private String default_dialect_class = "com.github.pagehelper.PageHelper"; private Field additionalParametersField; private String countSuffix = "_COUNT"; public PageInterceptor() { }
PageInterceptor实现了Interceptor接口
将SqlMapConfig.xml做修改:重新运行tomcat
然后。。。网上找的:PageHelper插件4.0.0以后的版本支持自动识别使用的数据库,可以不用配置将SqlMapConfig.xml做修改:
再次重新运行tomcat
成功了!结束转载地址:http://mhdul.baihongyu.com/