简单原理
mybatis用拦截器做插件,要分页时,拦截器拿到sql语句后,根据分页的需求配置修改sql语句带上分页功能
limit
,然后在用
PageInfo
类把所有的分页后获取的数据和信息都保存下来让开发者使用。
使用要引入maven坐标,这里用springboot的starter的jar类型:
<!-- 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.3.0</version>
</dependency>
service层的实现类的方法,开始分页:
@Override
public PageInfo pageSelect(Provider provider, int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
try {
List<Provider> providers = providerMapper.getProviders(provider);
PageInfo<Provider> pageInfo = new PageInfo<>(providers);
return pageInfo;
} finally {
PageHelper.clearPage();
}
}
2021-05-15 10:20:39.165 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.P.getProviders_COUNT : ==> Preparing: SELECT count(0) FROM provider WHERE 1 = 1
2021-05-15 10:20:39.165 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.P.getProviders_COUNT : ==> Parameters:
2021-05-15 10:20:39.168 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.P.getProviders_COUNT : <== Total: 1
2021-05-15 10:20:39.170 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.ProviderMapper.getProviders : ==> Preparing: select * from provider where 1=1 LIMIT ?
2021-05-15 10:20:39.170 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.ProviderMapper.getProviders : ==> Parameters: 3(Integer)
2021-05-15 10:20:39.173 DEBUG 3444 --- [nio-8080-exec-4] c.e.b.m.ProviderMapper.getProviders : <== Total: 3
controller层直接调用方法:
@GetMapping("/providers")
public String pageListProv(Model model, Provider porvider,
@RequestParam(value = "pageNum",defaultValue = "1")int pageNum,
@RequestParam(value = "pageSize",defaultValue = "3")int pageSize){
PageInfo pageInfo = providerService.pageSelect(porvider, pageNum, pageSize);
for(Object o : pageInfo.getList()) {
if(o instanceof Provider){
Provider p = (Provider) o;
System.out.println(p.getProviderName());
}
}
model.addAttribute("pages",pageInfo);
}