zoukankan      html  css  js  c++  java
  • springboot +mybatis分页插件PageHelper

    1.问题描述

    JAVA界ORM的两位大佬Hibernate和Mybatis,hb自带分页(上手挺快,以前用了好几年hb,后期运维及优化快疯了),mybatis没有分页功能,需要借助第三方插件来完成,比较流行的三方框架:PageHelper,今天结合springboot做下介绍,直接贴线上配置,保证可用(如有遗漏,朋友们可以指正下)。

    2. 解决方案

    2.1 配置项目pom.xml

            <!--分页-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.1.8</version>
            </dependency>
    

    2.2 配置PageHelper参数

    方式比有很多,这里只介绍使用过的两种吧。

    方式一,使用标签Configuration:

    
    public class PageHelperConfig {
    
    ​    @Bean
    
    ​    public PageHelper getPageHelper(){
    
    ​        PageHelper pageHelper=new PageHelper();
    
    ​        Properties properties=new Properties();
    
    ​        properties.setProperty("helperDialect","mysql");
    
    ​        properties.setProperty("reasonable","true");
    
    ​        properties.setProperty("supportMethodsArguments","true");
    
    ​        properties.setProperty("params","count=countSql");
    
    ​        pageHelper.setProperties(properties);
    
    ​        return pageHelper;
    
    ​    }
    
    }
    

    方式二,因为我们当时mybatis插件自动生成了一个xml,就直接放xml里了。跟sp的无配置文件概念是不是有点冲突? 这里简单啰嗦一句,其实软件的过程有点三十年河东三十年河西的味道,以前是要配置集中化,都由几个中心配置文件管理;现在是去中心化,全部通过标签来定义;看个人习惯吧,我们项目中除了application.yml也还有两个配置文件,一个是数据库和事务aop那个xml,从以前项目中移过来的,懒的再写了,直接在启动类上引用下就行了,也很简单。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!--设置-->
        <settings>
            <!-- 全局映射器启用缓存 -->
            <setting name="cacheEnabled" value="false"/>
            <!-- 查询时,关闭关联对象即时加载以提高性能 -->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
            <setting name="aggressiveLazyLoading" value="false"/>
            <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
            <setting name="multipleResultSetsEnabled" value="true"/>
            <!-- 允许使用列标签代替列名 -->
            <setting name="useColumnLabel" value="true"/>
            <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
            <setting name="useGeneratedKeys" value="true"/>
            <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
            <setting name="autoMappingBehavior" value="FULL"/>
            <!-- 对于批量更新操作缓存SQL以提高性能  但是返回id有问题-->
            <setting name="defaultExecutorType" value="SIMPLE"/>
            <!-- 数据库超过36000秒仍未响应则超时 -->
            <setting name="defaultStatementTimeout" value="36000"/>
            <!-- 日志使用logback实现 -->
            <!--<setting name="logImpl" value="LOGBACK"/>-->
            <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
    
        </settings>
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
    
                <property name="offsetAsPageNum" value="false"/>
                <property name="rowBoundsWithCount" value="false"/>
                <property name="pageSizeZero" value="true"/>
                <property name="reasonable" value="false"/>
                <property name="supportMethodsArguments" value="false"/>
                <property name="returnPageInfo" value="none"/>
            </plugin>
        </plugins>
    </configuration>
    

    2.3 项目中使用

    使用示例:

    public Object getAppUsers(ShareAppsVO shareAppsVO) {
    //分页就这一行就可以了两个参数,一是当前页,一是每页显示的条数
            PageHelper.startPage(shareAppsVO.getCurrentPage(), shareAppsVO.getPageSize());  
               List<DmaAppUser> dmaAppUsers = dmaAppUserMapper.getAppUsers(shareAppsVO);
            PageInfo<DmaAppUser> pageInfo = new PageInfo<DmaAppUser>(dmaAppUsers);
    
            Page page = new Page();
            page.setData(dmaAppUsers);
            //这里注意下,正常情况下,只需要上一页下一页的话,就不用PageInfo,info主要用于获取总页数了。PageHelper自带的类
            page.setTotal(pageInfo.getTotal()); 
            return page;
        }
    

    注意: PageHelper.startPage(shareAppsVO.getCurrentPage(), shareAppsVO.getPageSize()); 需要放到执行mybatis代码前一页,否则会有问题,网上也有解决该问题的方案,该场景没碰到就不测试了。


  • 相关阅读:
    机器学习
    octave安装使用
    学习pytorch
    安装Pytorch
    下载软件的好地方
    python 内置模块time timedate random
    关于git
    python软件目录结构规范
    python 内置参数
    test
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11182684.html
Copyright © 2011-2022 走看看