十分钟掌握MyBatis分页插件

十分钟掌握MyBatis分页插件,第1张

1.分页插件配置步骤

(1)在pom.xml中添加分页插件的依赖


    com.github.pagehelper
    pagehelper
    5.2.0

2)在mybatis的核心配置文件mybatis-config.xml中配置分页插件


    
    

2.分页插件的使用原理

先简单了解下分页数据的逻辑规律:

常见的三个参数如下: index: 当前页的起始索引 (从0开始) pageSize: 每页显示的条数 pageNum:当前页的页码 三者之间的关系为:index = (pageNum-1) * pageSize

例如:总记录数为 8 条 ,每页为 3 条记录,当前页码为 2 。那么:index = (2-1) * 3 = 3

(3)在测试类中进行测试

分页插件使用步骤

1. 需要在查询功能之前开启分页

PageHelper.startPage(int pageNum, int pageSize);

2. 执行查询,并将结果作为 PageInfo 的参数

 List purchases = purchaseMapper.queryAllPurchase();

3.在查询功能之后获取分页相关信息

PageInfo pageInfo = new PageInfo<>(purchases, pageSize);

具体代码如下:

 /**
  * @测试分页功能
  */
    @Test
    public void B(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        PurchaseMapper purchaseMapper = context.getBean("purchaseMapper", PurchaseMapper.class);
        PageHelper.startPage(2, 3);
        List purchases = purchaseMapper.queryAllPurchase();
        PageInfo pageInfo = new PageInfo<>(purchases, 3);
        System.out.println("分页相关信息"+pageInfo);
        
    }

从打印的日志信息可以看出:

执行的SQL语句使用了 LIMIT 子句来限制语句的返回行数

==>  Preparing: select * from purchase inner join goods on purchase.goodsId = goods.id inner join supplier on purchase.supplierId = supplier.id order by purchaseTime desc LIMIT ?, ? 
==> Parameters: 3(Long), 3(Integer)

pageInfo 输出结果为:

我们发现pageInfo 这个对象封装好了分页所需的所有数据信息

分页相关信息PageInfo
{pageNum=2, pageSize=3, size=3, startRow=4, endRow=6, total=8, pages=3, 
list=Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=8, pages=3, reasonable=false, pageSizeZero=false}[com.wsx.pojo.Purchase@49f5c307, com.wsx.pojo.Purchase@299266e2, com.wsx.pojo.Purchase@5471388b],
prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=1, navigateLastPage=3, navigatepageNums=[1, 2, 3]}

常用数据解释如下:

pageNum:当前页的页码

pageSize:每页显示的条数

size:当前页显示的真实条数(最后一页未满的情况)

startRow/endRow=6:从第几行开始/到第几行结束

total:总记录数

pages:总页数

prePage: 上一页的页码

nextPage:下一页的页码

isFirstPage/isLastPage:是否为第一页/最后一页

hasPreviousPage/hasNextPage:是否存在上一页/下一页

navigatePages:导航分页的页码数

navigatepageNums:导航分页的页码,[1,2,3]

3.实战运用

其他代码省略,为了让篇幅简短,我就只列控制层和视图层的代码

Controller:

/**
     * @查询所有
     * @分页功能
     */
    @RequestMapping("/allPurchase")
    public String list(Model model, @RequestParam(value="pn",defaultValue = "1")Integer pn){
        //接收前端传过来的参数 pn 表示为当前展示的页码. defaultValue = "1":没有的话,参数默认为1
        PageHelper.startPage(pn, 3);
        List Purchase = purchaseService.queryAllPurchase();
        PageInfo pageInfo = new PageInfo<>(Purchase, 3);
        model.addAttribute("page",pageInfo);
        model.addAttribute("list",Purchase);
        return "allPurchase";
    }

jsp页面

 
        
            
                当前第 ${pn=page.pageNum} 页 每页 ${page.pageSize} 条数据  总计 ${page.pages} 页共 ${page.total} 条记录
                
                上一页
                     
                         ${num}
                     
                下一页
            
        

代码部分内容简单解释下:

后台实例化对象后,将示例通过model传到域对象中。

页面直接通过EL表达式获取后端传过来的 PageInfo 对象名,通过对象名.属性即可获得指定参数

效果图如下:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/759117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存