在SSM整合框架中使用PageHelper分页插件

PageHelper是一款MyBatis插件,简化分页查询,支持多种数据库。本文介绍其安装配置、主要类及使用步骤,助您快速掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        PageHelper是一款开源的MyBatis插件,它提供了对MySQL、Oracle、DB2等主流数据库的支持,极大地简化了后端处理分页查询的过程,使用PageHelper对后端开发有很大帮助。

1. 引入PageHelper的依赖jar包

2. 配置PageHelper

在 Spring 核心配置文件 application.xml 中,配置 org.mybatis.spring.SqlSessionFactoryBean 时添加属性:

    <!--创建一个生产sqlSession的工厂对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--导入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!-- 传入PageHelper 分页插件 -->
        <property name="plugins">
            <array>
                <!-- 传入插件的对象 -->
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                            <!--数据库类型-->
                            <prop key="helperDialect">oracle</prop>
                            <!--页码超出范围自动修正-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

3. PageHelper 常用类信息

在使用 PageHelper 时,有3个主要使用的类需要了解:
在这里插入图片描述

  • Page 分页对象

    继承 ArrayList,对查询结果进行进一步的封装处理

    主要属性:

            pageNum : 起始页码

            pageSize : 每页显示条数

            startRow : 起始行

            endRow : 结束行

            total : 总记录数

            pages : 总页数

            reasonable : 分页合理化,布尔值,是否对超出范围的页码自动优化处理

  • PageHelper 通用分页拦截器

    拦截查询方法,对其进行分页相关的增强

    常用方法:

            Page < E > startPage(int pageNum,int pageSize):根据起始页和每页条数查询,返回一个Page结果集

            Page < E > offsetPage(int offset,int limit):根据起始索引和查询条数查询,返回一个Page结果集

  • PageInfo 响应给前端的分页对象

    对Page结果进行包装

    主要属性:

            pageNum : 当前页

            pageSize : 每页的数量

            size : 当前页的数量(最后一页不足每页条数)

            startRow : 当前页面第一个元素在数据库中的行号

            endRow : 当前页面最后一个元素在数据库中的行号

            pages : 总页数

            prePage: 上一页的页码

            nextPage: 下一页的页码

    构造方法:

             public PageInfo(List list) {
                     this(list, 8);
             }

4. PageHelper 使用步骤

在调用dao层方法前,先执行startPage()或offsetPage()方法

@Service("odersService")
public class OrdersServiceImpl implements IOrdersService {
    @Autowired
    private IOrdersDao iOrdersDao;

    @Override
    public List<Orders> findAll(int page, int size) {
    	//开启分页插件拦截器
        PageHelper.startPage(page, size);
        return iOrdersDao.findAll();
    }
}

将返回的分页信息通过 PageInfo 的构造方法进行封装(Page是ArrayList的子类)

@Controller
@RequestMapping("/orders")
public class OrdersController {

    @Autowired
    private IOrdersService odersService;

    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "pageNum", defaultValue = "1") int page, @RequestParam(name = "pageSize", defaultValue = "4") int size) {
        ModelAndView mv = new ModelAndView();
        List<Orders> odersList = odersService.findAll(page, size);
        //封装结果集
        PageInfo pageInfo = new PageInfo(odersList);
        mv.addObject("pageInfo", pageInfo);
        mv.setViewName("orders-list");
        return mv;
    }

}

只需要查询最简单的 “select * from orders” 语句,PageHelper将会自动调用count()方法,获取总记录数,计算出总页数等,并对结果集进行封装

5. PageHelper 使用的注意点

1. 只有紧跟在 PageHelper.startPage 方法后的第一个 Mybatis 的查询(Select)方法会被分页。

2. 不能同时配置多个分页插件

3. 分页插件不支持带有 for update 语句的分页,需要手动分页

4. 不支持一对一和一对多结果映射的分页查询,如果分页显示20条数据,这20条数据中每一个包含30条子数据,则子数据只能显示20条,其余会丢失。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值