PageHelper分页插件的原理及其使用

PageHelper分页插件原理

PageHelper本身是一个物理分页插件,实际原理就是修改最后的执行sql,增加相应的分页内容,是基于拦截器实现的。

例如,首先你配置了PageHelper的Pagenum和Pagesize属性,调用完startPage后,他会通过PageInterceptor对其后的第一个执行sql进行拦截,也就是对List list = userService.findAllUser()进行拦截,这里原本的sql可能是 select * from users,他会自动拼接上分页的sql语句,比如mysql环境的话,就是拼接上limit语句,随后执行,最后的结果,可以通过PageInfo和Page进行获取。

 

pom.xml文件添加依赖


    
      com.github.pagehelper
      pagehelper
      5.1.2
    
    

 

  spring-mybatis.xml 文件关于整合mybatis的配置(分页插件有标注)


    
    
    
        
        
        
        
        
        
            
                
                
            

        
        
        
            

                
                
                

                    
                    
                        
                            helperDialect=mysql
                            reasonable=true
                            supportMethodsArguments=true
                            params=count=countSql
                            autoRuntimeDialect=true
                        
                    
                
            
        
    

页面代码 main.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    商品信息管理系统
    


<%----%> <%-- 三大排序要求 数量的降序,日期的升序,价格降序 --%> <%-- 根据id查询返回 修改页面--%>
商品编号 商品名称 商品价格(单位) 库存数量 订单状态 商品区域(1.朝阳2.海淀3.丰台4.西城5.昌平) 创建时间 操作 操作 操作操作
${ob.id} ${ob.goodsName} ${ob.goodsPrice} ${ob.goodsCount} ${ob.billStatus} ${ob.goodsDistrict} ${ob.creationTime}修改 删除 新增
共${page.total} 条记录 第 ${page.pageNum} / ${page.pages}页 首页 上一页 下一页 尾页
点击另一个查询页面

返回商品详情首页

<%-- 导入前端框架--%>

接口 GoodsService.java

package com.sz.service;

import com.github.pagehelper.PageInfo;
import com.sz.pojo.Goods;

import java.util.List;

public interface GoodsService {
   
//     提供分页插件的查询

    PageInfo queryByPage(PageInfo pageInfo);

}

实现类 GoodsServiceImpl

package com.sz.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sz.mapper.GoodsMapper;
import com.sz.pojo.Goods;
import com.sz.service.GoodsService;
import constant.CommonCodeConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("goodsService")
public class GoodsServiceImpl implements GoodsService {

    @Autowired
    private GoodsMapper goodsMapper;

  @Override
    public PageInfo queryByPage(PageInfo pageInfo) {

        // 去第几页, 页码的大小
        PageHelper.startPage(pageInfo.getPageNum(),pageInfo.getPageSize());
        List lo = goodsMapper.queryAll();
        PageInfo page = new PageInfo(lo);

        return page;
    }
}

控制器代码GoodsController

package com.sz.controller;

import com.github.pagehelper.PageInfo;
import com.sz.pojo.Goods;
import com.sz.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;


import java.util.List;

@Controller
@RequestMapping("/good")
public class GoodsController {
    @Autowired
    private GoodsService goodsService;

//    查询商品详情并带有分页参数

    @RequestMapping("/page")
    public String queryByPage(Model model) {
        PageInfo pageInfo = new PageInfo<>();
        pageInfo.setPageSize(3); //每页的数量
        pageInfo.setPageNum(1);//当前页
        pageInfo = goodsService.queryByPage(pageInfo);
        model.addAttribute("page", pageInfo);


        return "main";
    }

    //    跳转分页页面
    @RequestMapping("/pageTo/{page}")
    public String pageInfo(@PathVariable("page") Integer page, Model model) {

//        上一页到顶时
        if (page < 1) {
            page = 1;
        }

        PageInfo pageInfo = new PageInfo<>();

        pageInfo.setPageSize(3); //每页的数量


        pageInfo.setPageNum(page);//当前页
        pageInfo = goodsService.queryByPage(pageInfo);
        model.addAttribute("page", pageInfo);
        return "main";


    }

}

关键要素:

通过 pageInfo.setPageSize(int);设置每页显示的数量

         pageInfo.setPageNum(page);设置当前所在的页数

 

希望通过简洁有效的方式实现分页效果

提供项目代码:https://pan.baidu.com/s/1Ji0SYhc_Rg9ALcJiJa01Zg 
提取码:da3j

你可能感兴趣的:(Java分页)