我们都知道,数据库的分页查询在实际项目中广泛应用,而且能够实现分页查询的插件有很多(像Mybatis自带的PageHelper),最近在项目中自定义了一个分页功能,在不适用插件的情况下也很方便。
MySql数据库实现分页的核心是:limit函数:
LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数。例如:
select * from table WHERE … LIMIT 10; #返回前10行
select * from table WHERE … LIMIT 0,10; #返回前10行
select * from table WHERE … LIMIT 10,20; #返回第10-20行数据
结合我自己的实践,总结如下:
1、定义分页实体类:(我使用了lombok插件,不用写get/set方法):
/**
* @author wangjie
* @version 2018/11/10
* 分页实体类
*/
@Data
public class PageVO {
//当前页码,默认第一页
private Integer currentPageNo=1;
//总页数
private Integer totalCount;
//页面容量
private Integer pageSize=5;
//上一页
private Integer upPageNo;
//下一页
private Integer nextPageNo;
//要前往的页码,默认0
private Integer toPageNo=0;
//设置当前页码
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo!=1){
upPageNo=currentPageNo-1;
}
nextPageNo=currentPageNo+1;
this.currentPageNo = currentPageNo;
}
public void setToPageNo(Integer toPageNo) {
//新一页
this.toPageNo = (toPageNo-1) * pageSize ;
//设置跳转后当前的页码
setCurrentPageNo(toPageNo);
}
//设置总页数:count为查询到的记录总数
public void setTotalCount(int count) {
if (count%pageSize > 0) {
this.totalCount = (count/pageSize)+1;
} else {
this.totalCount = count/pageSize;
}
}
}
2、UserDao和UserDao.xml:
/**
* 查询博客用户总数
*/
Integer getAllUsersCount();
/**
* 查看所有博客用户(分页)
*/
List<BlogUser> findAllUser(PageVO pageBean);
3、service层:
/*
* 查看所有博客用户(分页)
*/
List<BlogUser> findAllUser(PageVO pageVO);
service实现类:
/**
* 查看所有博客用户(分页)
*/
@Override
public List<BlogUser> findAllUser(PageVO pageVO){
return blogUserDao.findAllUser(pageVO);
}
4、Controller层:page为从前端页面传来的页码。
/**
* 查看所有用户(分页)
*/
@RequestMapping(value=("/findAllUsers"),method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public List<BlogUser> findAllUsers(@Param("page") Integer page){
//设置总页数
PageVO pageVO=new PageVO();
pageVO.setTotalCount(blogUserService.getAllUsersCount());
if(page==null || page==0){
pageVO.setToPageNo(1);
return blogUserService.findAllUser(pageVO);
}
pageVO.setToPageNo(page);
return blogUserService.findAllUser(pageVO);
}
核心代码如上。
5、注意事项:
要实现分页,重点在于如何正确地给limit函数传递参数,涉及到如何在分页实体类中设置各个参数的值,只有正确理解了原理,才能很轻松实现分页。