总之,可以手动配置,也可以不手动配置,PageHelper会自动分辨出数据库类型(支持的范围内)
并且mybatis是count先select后,也就是说count出数据才会继续select,这点避免了无效查询,有时候光看日志时这点容易被坑。
和数据源是mysql一样,PageHelper可以自动识别出来并通过不同的代理方法去分页~
public List<Map<String, Object>> getCarByNo(String plateno, int pagenum, int pagesize) {
// TODO Auto-generated method stub
List<Map<String, Object>> list = null;
String start =(pagenum-1)*pagesize+1+"";
String end = pagenum*pagesize+"";
list = mapper.getCarByNo(plateno,start,end);
return list;
}
serivice的编写
参数一传入车辆编号,参数二传入页数,参数三传入每页个数
解释:String start =(pagenum-1)*pagesize+1
例如页数传入1,(1-1)*5+1 =1 起始数据就是为1,每页个数为5,所以开始就是第一行开始
例如页数传入5,(5-1)*5+1=21 起始数据就是为5,每页个数为5,所以开始的第一行就是21
解释:String end = pagenum*pagesize
例如页数传1,他的结束条数就是第5条
例如页数传5,他的结束条数就是第25条
MapperDao的编写
List<Map<String, Object>> getCarByNo(@Param("plateno")String plateno, @Param("start")String start, @Param("end")String end);
没什么要太注意的
MapperXML的编写
select * from(
select t.*,rownum rn from(
select *
from VRESOURCE_CAR c
where c.PLATENO like concat(concat('%',#{plateno,jdbcType=VARCHAR}),'%')) t
where rownum < #{end,jdbcType=INTEGER}
)
where rn >#{start,jdbcType=INTEGER}
主要要理解这种分页的中心思想,首先他是先去查所有符合条件的数据
然后再去取这堆数据的结束点或者是结束行,这些数据再作为一个表去查询
再去用这个表查询起始行到结束行的条数,就这么简单的完成啦
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PageHelp的使用小示例
以下使用springboot做为演示,首先添加依赖
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
Controller
@ApiOperation("ehcache分页查询")
@GetMapping("pagefind")
public List<Map<String, Object>> pagefind(int page,int size){
return ehcacheservice.pagefind(page,size);
}
Service
public List<Map<String, Object>> pagefind(int page, int size) {
PageHelper.startPage(page, size);//重点就这一行代码
return ehcachemapper.findpage();
}
这样就可以返回所输入参数的分页。。。。但是返回的值只有数据没有总数。
下面是小进阶
public Map<String, Object> pagefind(int page, int size) {
PageHelper.startPage(page, size);//重点就这一行代码,下行紧跟查询语句
List<Map<String, Object>> findpage = ehcachemapper.findpage();
PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(findpage);//传入Pagehelper提供的类获取参数信息
HashMap<String, Object> map = new HashMap<>();//新建一个map装填数据
map.put("list", findpage);
map.put("total", pageInfo.getTotal());//获取数据总数
map.put("size", pageInfo.getPageSize());//获取长度
map.put("page", pageInfo.getPageNum());//获取当前页数
return map;
}
这样就完美啦
本人测试不用配置Bean或者properties信息也能正常分页查询,如果出现什么问题可以考虑一下设置配置bean