美文网首页mybatisspringboot
神奇的mybatis分页插件

神奇的mybatis分页插件

作者: jackcooper | 来源:发表于2018-09-14 09:58 被阅读308次

    今天给大家安利一个神奇的mybatis分页插件—— Mybatis-PageHelper。如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。

    支持的数据库

    1. Oracle
    2. Mysql
    3. MariaDB
    4. SQLite
    5. Hsqldb
    6. PostgreSQL
    7. DB2
    8. SqlServer(2005,2008)
    9. Informix
    10. H2
    11. SqlServer2012
    12. Derby
    13. Phoenix

    如何使用

    1、SpringBoot集成

    1.1 SpringBoot项目可以引入pagehelper-spring-boot-starter

    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>
    <!--mapper-->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>1.2.4</version>
    </dependency>
    <!--pagehelper-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>
    

    1.2 application.properties 配置

    #mybatis
    mybatis.type-aliases-package=tk.mybatis.springboot.model
    mybatis.mapper-locations=classpath:mapper/*.xml
    
    #mapper
    #mappers 多个接口时逗号隔开
    mapper.mappers=tk.mybatis.springboot.util.MyMapper
    mapper.not-empty=false
    mapper.identity=MYSQL
    
    #pagehelper
    pagehelper.helperDialect=mysql
    pagehelper.reasonable=true
    pagehelper.supportMethodsArguments=true
    pagehelper.params=count=countSql
    

    1.3 application.yml 配置

    mybatis:
        type-aliases-package: tk.mybatis.springboot.model
        mapper-locations: classpath:mapper/*.xml
    
    mapper:
        mappers:
            - tk.mybatis.springboot.util.MyMapper
        not-empty: false
        identity: MYSQL
    
    pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql
    
    

    2、如何在代码中使用

    • RowBounds方式的调用
    List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));
    
    • Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.startPage(1, 10);
    List<Country> list = countryMapper.selectIf(1);
    
    • Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.offsetPage(1, 10);
    List<Country> list = countryMapper.selectIf(1);
    
    • 参数方法调用
    public interface CountryMapper {
        List<Country> selectByPageNumSize(
                @Param("user") User user,
                @Param("pageNum") int pageNum, 
                @Param("pageSize") int pageSize);
    }
    
    //配置supportMethodsArguments=true
    //在代码中直接调用:
    List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
    

    说明:存在以上 Mapper 接口方法,你不需要在 xml 处理后两个参数。

    • 参数对象

    如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页

    //有如下 User 对象
    public class User {
        //其他fields
        //下面两个参数名和 params 配置的名字一致
        private Integer pageNum;
        private Integer pageSize;
    }
    //存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
    public interface CountryMapper {
        List<Country> selectByPageNumSize(User user);
    }
    //当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页
    List<Country> list = countryMapper.selectByPageNumSize(user);
    
    
    • ISelect 接口方式(JDK6、7用法)
    Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() {
        @Override
        public void doSelect() {
            countryMapper.selectGroupBy();
        }
    });
    
    • lambda用法(JDK8)
    Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(()-> countryMapper.selectGroupBy());
    
    //也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
    pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
        @Override
        public void doSelect() {
            countryMapper.selectGroupBy();
        }
    });
    //对应的lambda用法
    pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> countryMapper.selectGroupBy());
    
    //count查询,返回一个查询语句的count数
    long total = PageHelper.count(new ISelect() {
        @Override
        public void doSelect() {
            countryMapper.selectLike(country);
        }
    });
    //lambda
    total = PageHelper.count(()->countryMapper.selectLike(country));
    下面对
    
    

    文章参考:

    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

    相关文章

      网友评论

        本文标题:神奇的mybatis分页插件

        本文链接:https://www.haomeiwen.com/subject/gkbngftx.html