phppage类封装分页功能_SpringBoot整合分页插件

导读

  • 很久以前的项目分页查询的话大概会用limit,如果要统计总数还需要使用count,总之大多数情况下都是很麻烦的一件事,特别是使用Mybatis。
  • 分页插件确实解放了我们的双手,不用再写重复的sql,利用mybatis的插件的原理帮我们解决了系列问题。

SpringBoot整合

  • SSM的整合这里就不再说了,相信现在大部分公司都在使用SpringBoot,当然万变不离其中,你会了SSM的整合,SpringBoot当然不在话下了。
  • 别急,还有后续,需要加入架构师技术交流群或者想要更多Java干货、架构师视频课程的可以联系我,
点一下​chenjiabing666.github.io

整合之前

  • 在整合之前需要准备环境,数据源,mybatis整合,这里就不再细说了,有不了解的可以会看我之前的文章https://chenjiabing666.github.io/2018/09/02/springBoot%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/

开干

  • 添加Maven依赖
        <!--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());

装xx开始

  • 如果想要深入学习Mybatis,不防看一下本人的独立博客https://chenjiabing666.github.io/2019/08/05/mybatis%E6%B7%B1%E5%85%A5%E5%AD%A6%E4%B9%A0/
  • 另外,笔者新开了一个公众号,以后大部分文章会直接放在公众号上,后续会在公众号上分享精选资源供读者阅览,下面附上公众号链接

3e1a091ab52abc2752e32b8f04f6a9a4.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值