SSM框架整合--分页插件pageHelper不生效的解决办法

336 阅读2分钟

问题描述: 近期做项目的时候用到了该分页插件,测试的时候遇到一个现象,pagehelper有些时候分页没有效果。

原因分析: 1.首先确保pageHelper引用 和写法无误的情况(因为我这边的现象是有些页面分页有效,有些无效,说明不是插件的引用配置问题。如果都无效,或者爆ClassNOtFoundException或者ClassDefoundError,先检查依赖是否无误,有没有导入对应版本的的jsqlParser,有时候版本不一致也会出现这样的错误)

2.排除使用该插件一系列问题之后,我查了下pageHelper相关问题,终于发现了问题所在:

首先第一个:PageHelper.startPage(1,10); pageHelper只对该语句以后的第一个查询语句得到的数据进行分页。 第一个查询语句是指什么呢?举个例子吧,比如你有一个查询数据的方法,写在了PageHelper.startPage(1, 10);下面,但是这个查询方法里面,包含两个查询语句的话(假设一个是基础数据的查询语句,另一个是 你要分页返回的最终数据的查询语句),该插件就只会对你代码中PageHelper.startPage(1, 10);紧随其后的第一查询语句查询的数据进行分页,而此时你需要分页的那个查询方法不是排在最前面的。所以结果 并不是对返回最终数据的查询出来的数据进行分页,而是对基础查询的数据进行分页。

3.再检查一下sql语句是否有误,由于本质上是在查询语句后面拼接一个limit? ,? .所以编写sql语句时需要注意不能有 ; 号出现,否则就会导致sql语法错误.

以下是SSM框架下,pageHelper的配置参数,将其配置在Spring配置文件对应的位置即可

<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!-- 分页插件 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <!-- 配置溢出修正 -->
                <property name="properties">
                    <props>
                        <prop key="reasonable">true</prop>
                    </props>
                </property>
            </bean>
        </array>
    </property>
</bean>