springboot2.x集成了MyBatis的分页插件,并做为一个场景启动器pagehelper-spring-boot-starter.
在pom.xml中引入依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
在application.yaml中配置
pagehelper:
helper-dialect: mysql
reasonable: true
page-size-zero: true
1、reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
2、helper-dialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置该属性来指定分页插件使用哪种方言。如:mysql、oracle。
3、page-size-zero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果。
service:
@Service
public class NoticeServiceImpl implements NoticeService {
@Autowired(required = false)
private NoticeMapper noticeMapper;
@Override
public PageInfo<Notice> queryByPage(Integer pageNo, Integer pageSize) {
//设置分页条件,则下一个执行的sql语句就会被分页.只对其后的第一个查询有效。
PageHelper.startPage(pageNo,pageSize);
List<Notice> notices =noticeMapper.selectByExample(null);
//将查询结果打包成一个PageInfo
PageInfo<Notice> pageInfo = new PageInfo<>(notices);
return pageInfo;
}
}
controller:
@Controller
public class NoticeController {
@Autowired
private NoticeService noticeService;
/**
* @param pageNo 当前页码
* @param pageSize 每页大小
* @param model
* @return
*/
@RequestMapping("/notice-list")
public String toNoticeList(@RequestParam(defaultValue = "1")Integer pageNo, @RequestParam(defaultValue = "8")Integer pageSize, Model model){
PageInfo<Notice> pageInfo = noticeService.queryByPage(pageNo, pageSize);
//总页数
int totalPage = pageInfo.getPages();
//设置页面中分页的开始页码标记startPage、结束页码标记endPage
// ---------------------------------------------------------------------
int startPage = 1;
int endPage = totalPage;
//若共有10页 1 2 3 4 5 6 7 8 9 10
//分页条只会显示5页。
//则分为3个段: 1 2 3/8 9 10/其它
if(totalPage>5) {
if((pageNo-2)<=1) {
startPage=1;
endPage = 5;
}else if((pageNo+2)>=totalPage) {
endPage = totalPage;
startPage = endPage-4;
}else {
startPage = pageNo - 2;
endPage = pageNo + 2;
}
}
List<Integer> pageBtns = new ArrayList<>();
for(;startPage<=endPage;startPage++){
pageBtns.add(startPage);
}
//--------------------------------------------------------------------------
model.addAttribute("pageInfo",pageInfo);
model.addAttribute("pageBtns",pageBtns);
return "notice-list";
}
}
templates/notice-list.html分页条(thymeleaf模板)