zoukankan      html  css  js  c++  java
  • SpringBoot Mybatis 分页插件PageHelper

    添加maven配置:

        <!-- 分布插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>4.1.6</version>
            </dependency>

    添加Bean:

    //配置mybatis的分页插件pageHelper
        @Bean
        public PageHelper pageHelper(){
            PageHelper pageHelper = new PageHelper();
            Properties properties = new Properties();
            //设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
            properties.setProperty("offsetAsPageNum","true");
            //设置为true时,使用RowBounds分页会进行count查询
            properties.setProperty("rowBoundsWithCount","true");
            //设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果
            //properties.setProperty("pageSizeZero","true");
            //禁用合理化,启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
            properties.setProperty("reasonable","false");
            //配置mysql数据库的方言
            properties.setProperty("dialect","mysql");    //配置mysql数据库的方言
            pageHelper.setProperties(properties);
            return pageHelper;
        }

    SqlSessionFactory:

        @Bean
        public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource,PageHelper pageHelper) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            Resource[] mappers = (new PathMatchingResourcePatternResolver())
                    .getResources("classpath*:mybatis_mapper/*Mapper.xml");
            sessionFactory.setMapperLocations(mappers);
            sessionFactory.setPlugins(new Interceptor[]{pageHelper});
            return sessionFactory.getObject();
        }

    应用:

        public PageInfo<DataDict> selectListByParentKey(String parentKey){
            PageHelper.startPage(2,3);
            List<DataDict> list=mapper.selectListByParentKey(parentKey);
            PageInfo<DataDict> pageInfo = new PageInfo<>(list);
            return pageInfo;
        }

    封装返回的PageInfo

    public class PageResult {
    
        private ModelMapper modelMapper=SpringUtils.getBean(ModelMapper.class);
    
        private PageInfo pageInfo;
    
        private Class aClass;
    
        public PageResult(PageInfo _pageInfo ){
            this.pageInfo=_pageInfo;
        }
    
        /**
         *
         * @param _pageInfo  pageHelper的实例
         * @param _aClass list输出类型,如果aClass不为空,就将list转换为aClass类型,反之则不进行转换
         */
        public PageResult(PageInfo _pageInfo,Class _aClass){
          this.pageInfo=_pageInfo;
          this.aClass=_aClass;
        }
    
        private Integer pageIndex;
    
        private Integer pageSize;
    
        private Long totalCount;
    
        private Integer totalPages;
    
        private List list;
    
        public Integer getPageIndex() {
            return pageInfo.getPageNum();
        }
    
        public Integer getPageSize() {
            return pageInfo.getPageSize();
        }
    
        public Long getTotalCount() {
            return pageInfo.getTotal();
        }
    
        public Integer getTotalPages(){
            return pageInfo.getPages();
        }
    
        public List getList() {
            List list= pageInfo.getList();
            if(null!=aClass) {
                List list2 = new ArrayList();
                list.forEach(x -> {
                    list2.add(modelMapper.map(x, aClass));
                });
                return list2;
            }else{
                return list;
            }
        }
    }

    调用:

            PageHelper.startPage(request.getPageIndex(),request.getPageSize());
            List<DataDict> list=dataDictBizFacade.selectListByCondition(request.getDictKey(),request.getDictDesc(),request.getParentKey());
            PageResult result=new PageResult(new PageInfo<>(list),DataDictResponse.class);
            response.setData(result);

    ===============================================

    4.1.6版本

    会出现没调用pagehelper的sql里面也进行 分页

    升级5.1.10版本

    pom.xml

        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>5.1.10</version>
        </dependency>

    配置类修改为:

    @Configuration
    @ConfigurationProperties("jdbc.datasource")
    @MapperScan(basePackages = "com.shitou.huishi.domain.dataaccess", annotationClass = MyBatisMapper.class)
    public class DataSourceConfig {
        // 动态配置从esb config读取
        private String url = "jdbc:mysql://120.26.130.187:3306/huishi-server?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        private String username = "root";
        private String password = "jsy2016memeda";
        private String driverClassName = "com.mysql.jdbc.Driver";
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setDriverClassName(String driverClassName) {
            this.driverClassName = driverClassName;
        }
    
        //配置mybatis的分页插件pageHelper
        @Bean
        public PageHelper pageHelper(){
            PageHelper pageHelper = new PageHelper();
            Properties properties = new Properties();
            //设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
            properties.setProperty("offsetAsPageNum","true");
            //设置为true时,使用RowBounds分页会进行count查询
            properties.setProperty("rowBoundsWithCount","true");
            //设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果
            //properties.setProperty("pageSizeZero","true");
            //禁用合理化,启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
            properties.setProperty("reasonable","false");
            //配置mysql数据库的方言
    //        properties.setProperty("dialect","mysql");    //配置mysql数据库的方言
            pageHelper.setProperties(properties);
            return pageHelper;
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource, PageHelper pageHelper) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            Resource[] mappers = (new PathMatchingResourcePatternResolver())
                    .getResources("classpath*:mybatis_mapper/*Mapper.xml");
            sessionFactory.setMapperLocations(mappers);
            sessionFactory.setPlugins(new Interceptor[]{new PageInterceptor()});
    //        sessionFactory
    //                .setPlugins(new Interceptor[] { new MysqlPageReqParamInterceptor(), new MysqlPageResultInterceptor() });
            return sessionFactory.getObject();
        }
    
        @Bean
        public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("dataSource") DataSource dataSource)
                throws Exception {
            final DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
            dataSourceTransactionManager.setDataSource(dataSource);
            return dataSourceTransactionManager;
        }
    
        /*@Bean
        public TransactionTemplate transactionTemplate(
                @Qualifier("dataSourceTransactionManager") DataSourceTransactionManager dataSourceTransactionManager)
                        throws Exception {
            final TransactionTemplate jdbcTemplate = new TransactionTemplate();
            jdbcTemplate.setTransactionManager(dataSourceTransactionManager);
            return jdbcTemplate;
        }*/
    }

    注意其中的拦截类换成了PageInterceptor

    2.取消了配置识别mysql数据库的属性dialect,版本5以后可以自动识别

    
    
    

    https://www.ciphermagic.cn/mybatis-page-2.html#Spring%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

    https://www.cnblogs.com/1315925303zxz/p/7364552.html

    http://www.imooc.com/article/15451

    https://blog.csdn.net/liangwenmail/article/details/77864267

    https://github.com/pagehelper/Mybatis-PageHelper/issues/166

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/hongdada/p/9184310.html
Copyright © 2011-2022 走看看