MyBatis的扩展应用

171 阅读2分钟

PageHelper

Mybatis 通用分页插件

github.com/pagehelper/…

PageHelper 支持多种数据库:

1. Oracle

2. Mysql

3. MariaDB

4. SQLite

5. Hsqldb

6. PostgreSQL

7. DB2

  1. SqlServer(2005,2008)

9. Informix

10. H2

11. SqlServer2012

12. Derby

13. Phoenix

PageHelper分页插件

依赖:

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

mybatis全局配置文件:

<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>

测试

dao:

//获取所有员工
public List<TblEmployeePO> getEmps();

分页方式一: 通过Page或者P在这里插入代码片ageInfo

/**
 * 分页示例
 */
@Test
public void test01(){
    //从ioc容器中获取一个sqlSessionFactory
    SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
    //sqlsession
    SqlSession session1 = sqlSessionFactory.openSession();
    TblEmployeeMapper mapper1 = session1.getMapper(TblEmployeeMapper.class);
    //设置分页
    Page<TblEmployeePO> page = PageHelper.startPage(1, 5);
    List<TblEmployeePO> emps = mapper1.getEmps();
    emps.forEach(tblEmployeePO -> {
        System.out.println(tblEmployeePO);
    });

    System.out.println("当前页面"+page.getPageNum());
    System.out.println("总页数:"+page.getPages());
    System.out.println("每页记录数:"+page.getPageSize());
    System.out.println("总记录数:"+page.getTotal());
    System.out.println("使用PageInfo............................");
    PageInfo<TblEmployeePO> pageInfo = new PageInfo<TblEmployeePO>(emps);
    System.out.println("当前页面"+pageInfo.getPageNum());
    System.out.println("总页数:"+pageInfo.getPages());
    System.out.println("每页记录数:"+pageInfo.getPageSize());
    System.out.println("总记录数:"+pageInfo.getTotal());
    System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
    System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
    List<TblEmployeePO> list = pageInfo.getList();
    list.forEach(a->{
        System.out.println(a);
    });
    session1.close();
}

分页方式二: ISelect接口方式

/**
  * ISelect接口方式
  */
 @Test
 public void  test03(){
     //从ioc容器中获取一个sqlSessionFactory
     SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
     //sqlsession
     SqlSession session1 = sqlSessionFactory.openSession();
     TblEmployeeMapper tblEmployeeMapper = session1.getMapper(TblEmployeeMapper.class);
     System.out.println("Page的ISelect接口方式..........................");
     //设置分页并查询
     Page<TblEmployeePO> page = PageHelper.startPage(1, 5).doSelectPage(new ISelect() {
         @Override
         public void doSelect() {
             tblEmployeeMapper.getEmps();
         }
     });
     System.out.println("当前页面:"+page.getPageNum());
     System.out.println("总页数:"+page.getPages());
     System.out.println("每页记录数:"+page.getPageSize());
     System.out.println("总记录数:"+page.getTotal());
     List<TblEmployeePO> result = page.getResult();
     result.forEach(a->{
         System.out.println(a);
     });

     System.out.println("PageInfo的ISelect接口方式..........................");
     PageInfo<TblEmployeePO> pageInfo = PageHelper.startPage(1, 5).doSelectPageInfo(new ISelect() {
         @Override
         public void doSelect() {
             tblEmployeeMapper.getEmps();
         }
     });
     System.out.println("当前页面"+pageInfo.getPageNum());
     System.out.println("总页数:"+pageInfo.getPages());
     System.out.println("每页记录数:"+pageInfo.getPageSize());
     System.out.println("总记录数:"+pageInfo.getTotal());
     System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
     System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
     List<TblEmployeePO> list = pageInfo.getList();
     list.forEach(a->{
         System.out.println(a);
     });

     session1.close();
 }

分页方式二:lambda用法

/**
 * jdk8 lambda用法
 */
@Test
public  void test04(){
    //从ioc容器中获取一个sqlSessionFactory
    SqlSessionFactory sqlSessionFactory = ioc.getBean(SqlSessionFactory.class);
    //sqlsession
    SqlSession session1 = sqlSessionFactory.openSession();
    TblEmployeeMapper tblEmployeeMapper = session1.getMapper(TblEmployeeMapper.class);
    //设置分页并查询
    System.out.println("Page的lambda用法..........................");
    Page<TblEmployeePO> page = PageHelper.startPage(1, 5).doSelectPage(()->tblEmployeeMapper.getEmps());
    System.out.println("当前页面:"+page.getPageNum());
    System.out.println("总页数:"+page.getPages());
    System.out.println("每页记录数:"+page.getPageSize());
    System.out.println("总记录数:"+page.getTotal());
    List<TblEmployeePO> result = page.getResult();
    result.forEach(a->{
        System.out.println(a);
    });
    System.out.println("PageInfo的lambda用法..........................");
    PageInfo<TblEmployeePO> objectPageInfo = PageHelper.startPage(1, 5).doSelectPageInfo(() -> tblEmployeeMapper.getEmps());

    session1.close();
}

基于 PageHelper 分页:

实现步骤:

(1) maven 坐标

image.png

(2) 加入 plugin 配置

image.png

(3) PageHelper 对象

image.png

查询语句之前调用PageHelper.startPage 静态方法。

除了 PageHelper.startPage 方法外,还提供了类似用法的 PageHelper.offsetPage 方法。在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个 MyBatis 查询方法会被进行分页。