项目架构:
项目架构:springboot聚合项目架构
持久层:mybatis
数据库连接池为:druid
问题:
按照官方文档配置和开发,pagehelper分页始终无效,会把所有的数据全部查出来,没有起到分页的效果。
查阅大量资料,总结了两个导致pagehelper失效的原因:
1、分页插件依赖错误,springboot 需要依赖pagehelper-spring-boot-starter这个特定版本
官方链接:https://github.com/pagehelper/pagehelper-spring-boot
2、PageHelper.startPage()需要紧跟查询语句前面,不然导致分页失效。
按照以上两个原因修改之后还是无效,而且切换了各种版本,从低试到高版本,最后都无疑例外的无效,搞了好久,已经打算自己做分页了,最后发现:
由于使用druid,因此需要自己在代码中实现bean的配置以及添加分页插件,否则分页无效,而且不同版本实现的bean也不同。
最后我在项目中添加了一个配置类,解决了此问题。
5.0.0以上的版本则使用的是PageInterceptor,那么我们的bean就需要改成下面这样:
@Configuration
public class PageHelperConfig {
@Bean(name = "pageHelper")
public PageInterceptor pageHelper(){
PageInterceptor pageHelper = new PageInterceptor();
Properties properties = new Properties();
/**默认false,设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用*/
properties.setProperty("offsetAsPageNum","true");
/**默认false,设置为true时,使用RowBounds分页会进行count查询 */
properties.setProperty("rowBoundsWithCount","true");
/** 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 */
properties.setProperty("reasonable","true");
/** always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page */
properties.setProperty("returnPageInfo","check");
/** 支持通过Mapper接口参数来传递分页参数 */
properties.setProperty("supportMethodsArguments","false");
/** 配置数据库的方言 */
properties.setProperty("helperDialect","mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
pagehelper 5.0.0以下版本。使用的是这个类Pagehelper,我们在项目中可以这样写:
@Configuration
public class PageHelperConfig {
@Bean(name = "pageHelper")
public pageHelper pageHelper(){
pageHelper pageHelper = new pageHelper();
Properties properties = new Properties();
/**默认false,设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用*/
properties.setProperty("offsetAsPageNum","true");
/**默认false,设置为true时,使用RowBounds分页会进行count查询 */
properties.setProperty("rowBoundsWithCount","true");
/** 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 */
properties.setProperty("reasonable","true");
/** always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page */
properties.setProperty("returnPageInfo","check");
/** 支持通过Mapper接口参数来传递分页参数 */
properties.setProperty("supportMethodsArguments","false");
/** 配置数据库的方言 */
properties.setProperty("dialect","mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
注意:
1、版本不同,所实现的bean不相同
2、版本不同,数据库方言不同
参考链接:
https://blog.csdn.net/zht741322694/article/details/80029654