启动加载PageHelper
@Configuration
public class MyBatisConfiguration {
private static final Logger logger = LoggerFactory.getLogger(MyBatisConfiguration.class);
@Bean
public PageHelper pageHelper() {
logger.info("注册mybatis分页插件PageHelper");
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
工具类进一步验证Page实例(带内存分页)
public class PageHelperUtil {
@SuppressWarnings("unchecked")
public static <T> PagedResult<T> toPagedResult(List<T> datas) {
PagedResult<T> result = new PagedResult<T>();
if (datas instanceof Page) {
@SuppressWarnings("rawtypes")
Page page = (Page) datas;
result.setPageNo(page.getPageNum());
result.setPageSize(page.getPageSize());
result.setDataList(page.getResult());
result.setTotal(page.getTotal());
result.setPages(page.getPages());
} else {
result.setPageNo(1);
result.setPageSize(datas.size());
result.setDataList(datas);
result.setTotal(datas.size());
}
return result;
}
public static <T> PagedResult<T> toPagedLimitResult(List<T> datas, Integer pageNo, Integer pageSize, long count) {
PagedResult<T> result = new PagedResult<T>();
if (CollectionUtils.isEmpty(datas)) {
result.setPageNo(pageNo);
result.setPageSize(pageSize);
result.setDataList(new ArrayList<>());
result.setTotal(0);
result.setPages(0);
result.setReadCount(count);
return result;
}
int pages = datas.size() / pageSize;
int totalRowNum = datas.size();
int fromIdx = (pageNo - 1) * pageSize;
int toIdx = pageNo * pageSize > totalRowNum ? totalRowNum : pageNo * pageSize;
if (datas.size() % pageSize != 0) {
pages++;
}
if (fromIdx > toIdx) {
result.setPageNo(pageNo);
result.setPageSize(pageSize);
result.setDataList(new ArrayList<>());
result.setTotal(datas.size());
result.setPages(pages);
result.setReadCount(count);
return result;
}
List<T> dataList = datas.subList(fromIdx, toIdx);
result.setPageNo(pageNo);
result.setPageSize(pageSize);
result.setDataList(dataList);
result.setTotal(datas.size());
result.setPages(pages);
result.setReadCount(count);
return result;
}
}
如何使用
PageHelper.startPage(pageNo, pageSize);
List<HoldCombinedBo> holdCombinedBos = commonPositionMapper.selectHoldCombined();
PagedResult<HoldCombinedBo> holdCombinedBoPagedResult = PageHelperUtil.toPagedResult(holdCombinedBos);
配置多数据源时导致分页失效
查询的集合不是Page的实例导致分页失效
public static <T> PagedResult<T> toPagedResult(List<T> datas) {
PagedResult<T> result = new PagedResult<T>();
if (datas instanceof Page) {
}else {
result.setPageNo(1);
result.setPageSize(datas.size());
result.setDataList(datas);
result.setTotal(datas.size());
}
return null;
}
如何解决
使用SqlSessionFactory重新加载pageHelper
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(primaryDataSource);
// 重新加载pageHelper
sessionFactory.setPlugins(pageHelper());
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MAPPER_LOCATION));
sessionFactory.setConfiguration(globalConfiguration());
return sessionFactory.getObject();
}