在項目中配置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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM