簡單原理
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);
}