天天看点

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