- 很久以前的项目分页查询的话大概会用limit,如果要统计总数还需要使用count,总之大多数情况下都是很麻烦的一件事,特别是使用Mybatis。
- 分页插件确实解放了我们的双手,不用再写重复的sql,利用mybatis的插件的原理帮我们解决了系列问题。
SpringBoot整合
- SSM的整合这里就不再说了,相信现在大部分公司都在使用SpringBoot,当然万变不离其中,你会了SSM的整合,SpringBoot当然不在话下了。
整合之前
-
在整合之前需要准备环境,数据源,mybatis整合,这里就不再细说了,有不了解的可以会看我之前的文章 https://chenjiabing666.github.io/2018/09/02/springBoot%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/
开干
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
/**
* @Description 分页插件的参数
* @Author CJB
* @Date 2020/3/11 9:48
*/
@ConfigurationProperties(prefix = "mybatis.page")
@Data
public class PageHelperProperties{
/**
* 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
* oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
*/
private String helperDialect;
/**
* 是否进行count查询,默认是true,查询
* 如果设置为false,那么总数total将会为-1,不进行count查询
*/
private Boolean countSql=true;
/**
* 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
*/
private Boolean reasonable=false;
/**
* 默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。
*/
private Boolean pageSizeZero=false;
}
-
向Mybatis注入插件,查看
MybatisAutoConfiguration
的源码可以看出,直接向IOC注入Intercept即可,不需要重新注入SqlSessionFactory了,如下:
@Configuration
@EnableConfigurationProperties(value = {PageHelperProperties.class})
public class MybatisConfig{
private PageHelperProperties pageHelperProperties;
public MybatisConfig(ObjectProvider<PageHelperProperties> objectProvider){
this.pageHelperProperties=objectProvider.getIfUnique();
}
/**
* 注入分页插件,springBoot会将注入的插件自动设置到sqlSessionFactory中
*/
@Bean
public Interceptor interceptor(){
PageInterceptor pageInterceptor = new PageInterceptor();
//加载配置
Properties properties = new Properties();
//方言不设置可以自动选择
if (StringUtils.isNotBlank(pageHelperProperties.getHelperDialect()))
properties.setProperty("helperDialect",pageHelperProperties.getHelperDialect());
properties.setProperty("countSql", String.valueOf(pageHelperProperties.getCountSql()));
properties.setProperty("reasonable",pageHelperProperties.getHelperDialect());
properties.setProperty("pageSizeZero",pageHelperProperties.getHelperDialect());
//设置参数
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}
- 如果需要改变参数,直接在全局配置文件中直接修改即可,如下:
mybatis:
page:
helperDialect: mysql
countSql: true
reasonable: false
pageSizeZero: false
public class PageUtils{
/**
* 此处pageNum和pageSize直接作为参数,这里就不封装了,自己可以根据条件封装一下
* @param pageNum
* @param pageSize
* @param iSelect
* @param <T>
* @return
*/
public static <T>PageData<T>getPageInfo(Integer pageNum,Integer pageSize,ISelect iSelect){
PageInfo<Object> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(iSelect);
PageData<T> data = new PageData<>();
BeanUtils.copyProperties(pageInfo,data);
return data;
}
}
PageUtils.getPageInfo(req.getPageNum(),req.getPageSize(),()->articleMapper.selectAll());
原文
https://chenjiabing666.github.io/2020/03/11/SpringBoot整合分页插件/