赞
踩
目录
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- <artifactId>pagehelper-spring-boot-starter</artifactId>
- <version>1.4.1</version>
- </dependency>
注意使用spring boot项目要导入上面的依赖,不用直接使用pagehepler,一些ssm项目可以使用pagehepler依赖。
- # PageHelper分页插件
- pagehelper:
- helperDialect: mysql //数据库方言
- supportMethodsArguments: true //是否支持传参
- params: count=countSql //参数
方式一
- /**
- * 查询结算账单手账列表
- */
- @GetMapping("/list")
- public TableDataInfo list(HttpServletRequest request, BmsBillMemo bmsBillMemo) {
- System.out.println(request);
- String orderBy = "create_time desc";
- Page<BmsBillMemo> objects = PageHelper.startPage(bmsBillMemo.getCurrentPage(), bmsBillMemo.getPageSize(), orderBy);
- bmsBillMemoService.selectBmsBillMemoList(bmsBillMemo);
- return getDataTable(objects);
- }
-
- public TableDataInfo getDataTable(Page<?> objects) {
- TableDataInfo rspData = new TableDataInfo();
- rspData.setCode(200);
- rspData.setRows(objects.getResult());
- rspData.setMsg("查询成功");
- rspData.setTotal(objects.getTotal());
- return rspData;
- }
使用PageHelper.startPage方法的返回,获取集合及总件数。
方式二
- /**
- * 查询结算账单手账列表
- */
- @GetMapping("/list")
- public TableDataInfo list(HttpServletRequest request, BmsBillMemo bmsBillMemo) {
- System.out.println(request);
- String orderBy = "create_time desc";
- Page<BmsBillMemo> objects = PageHelper.startPage(bmsBillMemo.getCurrentPage(), bmsBillMemo.getPageSize(), orderBy);
- List<BmsBillMemo> list = bmsBillMemoService.selectBmsBillMemoList(bmsBillMemo);
- PageInfo pageInfo = new PageInfo(list,5);
- return getDataTable1(pageInfo);
- }
- public TableDataInfo getDataTable1(PageInfo objects) {
- TableDataInfo rspData = new TableDataInfo();
- rspData.setCode(200);
- rspData.setRows(objects.getList());
- rspData.setMsg("查询成功");
- rspData.setTotal(objects.getTotal());
- return rspData;
- }
使用pageinfo对象,和方式一的区别是,可以设置导航也信息,例如上面设置的5。也可以获取更多的信息。
必须是调用查询方法之前就使用PageHelper.startPage,中间不能有其它的查询操作。因为PageHelper.startPage采用的是ThreadLocalL保存分页参数,然后在执行查询数据库sql时,通过拦截器PageInterceptor在sql语句中添加了分页参数,达到分页的目的,执行新的sql获取分页结果,最后在finally方法中清空ThreadLocalL。
所以这里PageHelper有个隐患,如果设置了PageHelper.startPage,之后的查询语句如果出现异常,就导致PageHelper中的ThreadLocalL仍然具有分页参数,如果此时有一个非分页的查询语句进来,这个时候就该查询就会被分页(而本不应该需要分页)。
可以在sql外面套一层try catch finally,在finally中执行下面的方法,清空分页参数的线程变量
PageHelper.clearPage();
还有一点,在多数据源的情况下,也要注意pagehelper的使用,默认它只会在一个数据源中起作用。
参照
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。