#pageHelper Mybatis分页插件以及原理 #
第一:添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
第二:配置文件 application.properties
# mybatis分页插件 - pageHelper
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
第三:dao层
/**
*mapper层查询所有
*/
@Select("select * from 表名")
List<实体类> queryAll();
第四 service
List<实体类> queryAll(int pagIndex,int pageSize);
第五 serviceImpl
List<实体类> queryAll(int pagIndex,int pageSize){
PageHelper.startPage(pageIndex, pageSize);
List<*> lists = Mapper.queryAll();
PageInfo<*> pageInfo = new PageInfo<*(lists);
}
pageInfo 就是最后分页的结果 若pageInfo 返回值不是list 修改service 返回值为 Map<String,Object>
map.put(“pageInfo ”,pageInfo ) ;
return map;
第六 controller层
List<*> queryAll(int pagIndex,int pageSize){
return service.queryAll(int pagIndex,int pageSize);
}
备注 :#### 这是最简单的分页 还可以在mapper层加条件
查询成功之后返回的数据
"tokenCheck": 1,
"status": 1,
"information": "查询成功",
"data": {
"total": 40298, //总数
"list": [
{
"carNumber": "晋-AG506A",
"frequency": 513
}
],
"pageNum": 1, //当前页码
"pageSize": 1,//每页显示的条数
"size": 1,//长度
"startRow": 1,//当前页面第一个元素在数据库中的行号
"endRow": 1,//当前页面最后一个元素在数据库中的行号
"pages": 40298,//页码数
"prePage": 0,//前一页
"nextPage": 2,//第一页
"isFirstPage": true,//是否是第一页
"isLastPage": false,//是否是最后一页
"hasPreviousPage": false,//是否有前一页
"hasNextPage": true,//是否有下一页
"navigatePages": 8,//导航页码数
"navigatepageNums": [
1,
2,
3,
4,
5,
6,
7,
8
],//所有导航页号
"navigateFirstPage": 1,
"navigateLastPage": 8,
"lastPage": 8,
"firstPage": 1
}
}
注意:
分页插件的一些坑:
PageHelper.startPage(pageNum, pageSize)的位置:
PageHelper.startPage(pageNum, pageSize) 只对该语句以后的第一个查询语句得到的数据进行分页!!!
譬如:下面这段代码本来想根据 userName 以及 userCompany 进行条件查询的,但是 startPage() 后面紧跟的不是 userMapper.getUserList(userName, userCompany),因此,分页“并不会生效”,或者说分页用错地方了,用在 userMapper.getById(id) 上了,自然看不到想要的效果。(可自行在控制台查看 sql 的执行效果)
// 设置分页查询条件
PageHelper.startPage(pageNum, pageSize);
// 根据id查询
int user = userMapper.getById(id);
// 根据 userName 和 userCompany 进行条件查询
List<User> userList = userMapper.getUserList(userName, userCompany);
以上就是分页原理 以及分页插件的坑