MyBatis 集成分页插件

MyBatis 可以使用第三方的插件来对功能进行扩展,分页助手 PageHelper 是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据。

开发步骤:

①首先配置环境

②导入通用 PageHelper 的坐标

③在 mybatis 核心配置文件中配置 PageHelper 插件

④测试分页数据


1、首先在持久层写一个查询全部信息的方法 findAll()

package cn.henu.mapper;

import cn.henu.domain.User;
import java.util.List;

public interface UserMapper {
    public List<User> findAll(); 
}

2、在映射文件中配置查询全部信息的标签

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.henu.mapper.UserMapper">

    <select id="findAll" resultType="cn.henu.domain.User">
        select * from user
    </select>

</mapper>

2-1、先写一个测试类,测试一下看能不能查询出全部信息

package cn.henu.test;

import cn.henu.domain.User;
import cn.henu.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {
    //集成分页助手插件,测试分页
    @Test
    public void test() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.commit();
        sqlSession.close();
    }
}

查询结果:
User{id=1, username='zhangsan', password='123', birthday=null}
User{id=2, username='lisi', password='123', birthday=null}
User{id=3, username='wangwu', password='123', birthday=null}
User{id=4, username='zhaoliu', password='123', birthday=null}
User{id=5, username='tianqi', password='123', birthday=null}
User{id=6, username='xiaoming', password='123', birthday=Mon Nov 02 11:01:26 CST 2020}
User{id=7, username='wangba', password='123', birthday=Mon Nov 02 11:01:34 CST 2020}

2-2、对应数据库中的信息

 接下来开始集成分页插件

3、在 pom.xml 文件中导入通用 PageHelper 的坐标

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.2.0</version>
</dependency>
<!--解析器-->
<dependency>
  <groupId>com.github.jsqlparser</groupId>
  <artifactId>jsqlparser</artifactId>
  <version>3.2</version>
</dependency>

4、在 mybatis 核心配置文件中配置 PageHelper 插件,告诉 mybatis 我要使用哪个插件

<!--配置分页助手插件-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/><!--使用mysql的方言,即limit-->
    </plugin>
</plugins>

5、在上面写的测试类中修改一些代码即可测试分页数据获取

package cn.henu.test;

import cn.henu.domain.User;
import cn.henu.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {
    //集成分页助手插件,测试分页
    @Test
    public void test() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //设置分页相关参数 当前页+每页显示的条数
        PageHelper.startPage(1,3);//第一页显示3条数据

        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.commit();
        sqlSession.close();
    }
}

5-1、但是运行之后会报错

org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.ClassCastException: class com.github.pagehelper.PageHelper cannot be cast to class org.apache.ibatis.plugin.Interceptor (com.github.pagehelper.PageHelper and org.apache.ibatis.plugin.Interceptor are in unnamed module of loader 'app')

 这是因为在 pom.xml 文件中导入的 pagehelper 的坐标的版本是 5.2.0 的,但从自4.0.0版本以后就不实现这个接口了,而是实现com.github.pagehelper.PageInterceptor 接口,因此修改为:

<!--配置分页助手插件-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="dialect" value="mysql"/><!--使用mysql的方言,即limit-->
    </plugin>
</plugins>

但是修改为 PageInterceptor 接口之后运行又会报另外一个错误:

org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: com.github.pagehelper.PageException: java.lang.ClassNotFoundException: mysql

 这是因为从4.0.0版本以后已经可以自动识别数据库了,不需要再去指定数据库,因此修改为:

<!--    配置分页助手插件-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--        <property name="dialect" value="mysql"/>&lt;!&ndash;使用mysql的方言,即limit&ndash;&gt;-->
    </plugin>
</plugins>

 再执行第5步的测试代码,输出结果为:

对应数据库中的前三条记录:

修改第5步测试代码中的 PageHelper.startPage() 中的参数:

//设置分页相关参数 当前页+每页显示的条数
PageHelper.startPage(2,3);//第二页显示3条数据

运行,输出结果为: 

 对应数据库中的中间三条记录:

修改第5步测试代码中的 PageHelper.startPage() 中的参数: 

//设置分页相关参数 当前页+每页显示的条数
PageHelper.startPage(3,3);//第三页显示3条数据

运行,输出结果为:

 对应数据库中的后三条记录(后三条中只有一条数据):

6、获取与分页相关的其他参数

package cn.henu.test;

import cn.henu.domain.User;
import cn.henu.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {
    //集成分页助手插件,测试分页
    @Test
    public void test() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //设置分页相关参数 当前页+每页显示的条数
        PageHelper.startPage(3,3);

        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        //获取与分页相关的参数
        PageInfo<User> pageInfo = new PageInfo<User>(userList);
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("上一页:"+pageInfo.getPrePage());
        System.out.println("下一页:"+pageInfo.getNextPage());
        System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
        System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());

        sqlSession.commit();
        sqlSession.close();
    }
}

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值