1.sql语句物理分页
@Select("select * from user limit #{curPage},#{pageSize}")
List<UserVO> FindByPage (Integer curPage, Integer pageSize);
mapper层
@RequestMapping("page")
public Map FindByPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage
,@RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){
// controller传页数 (curPage-1)*pageSize 的逻辑处理
List<UserVO> userVOS = pageService.FindByPage((curPage-1)*pageSize, pageSize);
HashMap map = new HashMap();
if (userVOS != null){
map.put("code",200);
map.put("查询结果",userVOS);
}else {
map.put("code",404);
map.put("查询结果","没有查到");
}
return map;
}
controller层
2.使用myabtis插件(pagehelper)
<!--pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.3</version>
</dependency>
<!--pagehelper插件配置文件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.3</version>
</dependency>
<!--pagehelper插件配置文件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
导入pom
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
pagehelper.page-size-zero=true
spring.main.allow-circular-references=true
application.properties文件中写入配置
@Select("select * from user")
List<UserVO> FindByMybatisPage();
mapper层不用写Limit
@RequestMapping("mybatispage")
public Map FindByMybatisPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage, @RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){
HashMap map = new HashMap();
List<UserVO> userVOS = pageService.FindByMybatisPage((curPage - 1) * pageSize, pageSize);
if (userVOS != null){
map.put("code",200);
map.put("查询结果",userVOS);
}else {
map.put("code",404);
map.put("查询结果","没有查到");
}
return map;
}
controller还是如正常写
@Override
public List<UserVO> FindByMybatisPage(Integer curPage,Integer pageSize) {
PageHelper.startPage(curPage,pageSize);//底层AOP 必须在方法的第一行加分页代码
List<UserVO> userVO = pageMapper.FindByMybatisPage();
return userVO;
}
service层使用 PageHelper.startPage API完成分页
1. PageHelper的大概原理
PageHelper是MyBatis的一个插件,内部实现了一个PageInterceptor拦截器。Mybatis会加载这个拦截器到拦截器链中。在我们使用过程中先使用PageHelper.startPage这样的语句在当前线程上下文中设置一个ThreadLocal变量,再利用PageInterceptor拦截器这个分页拦截器拦截,从ThreadLocal中拿到分页的信息,输出语句,最后再把ThreadLocal中的东西清除掉。
2. 使用注意事项
PageHelper使用了ThreadLocal保存分页参数,分页参数和线程是绑定的。因此我们需要保证PageHelper 的startPage调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。