spring-boot List转Page(Pagehelper分页)
1、mybatis整合Pagehelper原理mybatis插件中有一个拦截器org.apache.ibatis.plugin.Interceptor,主要用于mybatis插件的植入。pagehelper的PageInterceptor实现了Interceptor,PageInterceptor在所有执行query操作时插入拦截。地址为:Mybatis-PageHelper/src/main/j
1、mybatis整合Pagehelper原理
mybatis插件中有一个拦截器org.apache.ibatis.plugin.Interceptor,主要用于mybatis插件的植入。pagehelper的PageInterceptor实现了Interceptor,PageInterceptor在所有执行query操作时插入拦截。
引入的jar包:
<!-- pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.3</version> </dependency>
官方文档,参考:Mybatis-PageHelper/HowToUse.md at master · pagehelper/Mybatis-PageHelper · GitHub
示例:
package com.lxk.config;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class PageHelperConfig {
@Bean
PageHelper pageHelper() {
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("pageSizeZero", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
//添加插件
new SqlSessionFactoryBean().setPlugins(new Interceptor[]{pageHelper});
return pageHelper;
}
}
@Override
public PagerUtil<AdapterInstance> queryList(AdapterInstance adapterInstance){
log.info("查询适配器列表开始:[{}]", adapterInstance);
Page page = PageHelper.startPage(adapterInstance.getPageNum(), adapterInstance.getPageSize());
List<AdapterInstance> adapterInstanceList = adapterInstanceMapper.queryList(adapterInstance);
PageInfo info = new PageInfo<>(page.getResult());
PagerUtil<AdapterInstance> pagerUtil = new PagerUtil<>(page.getPageNum(), page.getPageSize(), adapterInstanceList, (int) info.getTotal());
log.info("查询适配器实例列表结束");
return pagerUtil;
}
2、List转Page(Pagehelper)
public <T> PagerUtil<T> listConvertToPage(List<T> list, PageModel pageModel) {
Page page = PageHelper.startPage(pageModel.getPageNum(), pageModel.getPageSize());
if (CollectionUtils.isEmpty(list)) {
return new PagerUtil<T>(page.getPageNum(), page.getPageSize(), null, 0);
}
Integer pageNum = pageModel.getPageNum();
// offset $offset=($page-1)*$pagesize
int start = (pageModel.getPageNum() - 1) * pageModel.getPageSize();
int end = (start + pageModel.getPageSize()) > list.size() ? list.size() : (start + pageModel.getPageSize());
return new PagerUtil<T>(page.getPageNum(), page.getPageSize(), list.subList(start, end), list.size());
}
3、FAQ:### The error occurred while setting parameters
### SQL: select ** from "standard_alarm_info" order by update_time desc limit 10; limit ? offset ?
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "limit"
当pom中有 pageHelper 依赖,分页时有可能出现在sql 最后在拼接一次limit 的情况,把传入参数的明改一下就可以了
pageIndex 和 pageSize 这两个参数换个名即可 ,pageHelper 会判断入参中有没有这两个参数,有进行添加limit
4、扩展: Mybatis-plus使用分页进行分页查询

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)