zoukankan      html  css  js  c++  java
  • 在项目中配置PageHelper插件时遇到类型转换异常

    PageHelper是一种常用的分页工具,按照常规方法在mybatis的配置文件中整合它:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
        <!--全局环境参数-->
        <settings>
            ...
        </settings>
    
        <!--插件配置-->
        <plugins>
            <!--支持PageHelper插件-->
            <plugin interceptor="com.github.pagehelper.PageHelper">
                ...
            </plugin>
        </plugins>
    
    </configuration>

    在启动服务的时候,却抛出如下异常:

    Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor

    看字面意思是类型转换异常,PageHelper不能转换成org.apache.ibatis.plugin.Interceptor,于是点进PageHelper的源码

    /**
     * Mybatis - 通用分页拦截器<br/>
     * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
     *
     * @author liuzh/abel533/isea533
     * @version 5.0.0
     */
    public class PageHelper extends PageMethod implements Dialect {
        ...
    }

    确实没有实现Interceptor接口,有丶谜,因为以前的项目也是这么配置的,为什么没出这种问题?

    找到老项目点进PageHelper源码:

    /**
     * Mybatis - 通用分页拦截器
     *
     * @author liuzh/abel533/isea533
     * @version 3.3.0
     *          项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
     */
    @SuppressWarnings("rawtypes")
    @Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
    public class PageHelper implements Interceptor {
        ...
    }

    原因找到了:

    PageHelper3、4版本实现了Interceptor接口,PageHelper5不再实现。

    那么问题来了,如果使用PageHelper5版本,怎么在mybatis中继承这个插件?从PageHelper所在的com.github.pagehelper包中,发现了一个叫PageInterceptor的类,名字有丶像我们要找的东西,点进源码一看,果然实现了Interceptor接口。

    于是我们尝试将这个类放入mybatis的配置文件中,删除不存在的属性,启动服务正常。

    结论:使用PageHelper版本3、4时,在mybatis配置文件中用PageHelper类集成,使用PageHelper版本5时,在mybatis配置文件中使用PageInterceptor类集成。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
        <!--全局环境参数-->
        <settings>
            ...
        </settings>
    
        <!--插件配置-->
        <plugins>
            <!--支持PageHelper插件-->
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
            </plugin>
        </plugins>
    
    </configuration>
  • 相关阅读:
    20165225《Java程序设计》第六周学习总结
    实验一 Java开发环境的熟悉
    20165225《Java程序设计》第五周学习总结
    移动web——bootstrap响应式工具
    移动web——bootstrap栅格系统
    移动web——bootstrap模板
    移动web——媒体查询
    移动web——轮播图
    移动web——touch事件应用
    移动web——touch事件介绍
  • 原文地址:https://www.cnblogs.com/dubhlinn/p/10932261.html
Copyright © 2011-2022 走看看