天天看點

MyBatis插件原理與分頁插件

MyBatis插件原理與分頁插件
MyBatis插件原理與分頁插件
MyBatis插件原理與分頁插件
MyBatis插件原理與分頁插件
MyBatis插件原理與分頁插件

簡單原理

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);
}