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 对象名,通过对象名.属性即可获得指定参数
效果图如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)