MyBatis框架-分页的实现

MyBatis分页的实现

思考:为什么需要分页?

在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对数据库压力就在可控范围内。

不同的数据库使用sql分页的方式也不一样。

Mysql使用Limit实现分页

-- 语法
SELECT * FROM table LIMIT stratIndex,pageSize
-- 检索记录行 6-15   
SELECT * FROM table LIMIT 5,10;
-- 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
-- 检索记录行 96-last.   
SELECT * FROM table LIMIT 95,-1; 
-- 如果只给定一个参数,它表示返回最大的记录行数目:
-- 检索前 5 个记录行
SELECT * FROM table LIMIT 5; 
-- 换句话说,LIMIT n 等价于 LIMIT 0,n。

普通分页

UserMapper.java
//分页查询
List<User> selectUserLimit(Map<String,Integer> map);
UserMapper.xml
<select id="selectUserLimit" resultType="com.sin.pojo.User" parameterType="map">
    select * from user limit #{startIndex},#{pageSize}
select>
测试用例
//分页查询 , 两个参数startIndex , pageSize
@Test
public void selectUserLimit(){
    SqlSession session = MyBatisUtil.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    int currentPage = 1;  //第几页
    int pageSize = 2;  //每页显示几个
    Map<String,Integer> map = new HashMap<String,Integer>();
    map.put("startIndex",(currentPage-1)*pageSize);
    map.put("pageSize",pageSize);
    List<User> users = mapper.selectUserLimit(map);
    for (User user: users){
        System.out.println(user);
    }
    session.close();
}

MyBatis框架-分页的实现_第1张图片

PageHelper 插件

MyBatis框架-分页的实现_第2张图片

官方文档:https://pagehelper.github.io/

支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等

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

导入maven
<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelperartifactId>
    <version>5.2.1version>
dependency>
Mybatis-config.xml

    <plugins>
        
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            
            <property name="helperDialect" value="mysql"/>
            
            <property name="reasonable" value="true"/>
        plugin>
    plugins>
Mapper
public interface StudentMapper {
    //获取所有学生及对应老师的信息
    public List<Student> getStudents();
}
Mapper.xml

<select id="getStudents" resultMap="StudentTeacher">
  select * from student
select>
测试用例
 @Test
    public void selectUser2(){
        /**
         * 开始分页
         * @param pageNum = 1  页码
         * @param pageSize = 5 每页显示数量
         */
        PageHelper.startPage(1,5);
        SqlSession session = MyBatisUtil.getSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        List<Student> users = mapper.getStudents();
        PageInfo<Student> info = new PageInfo<>(users);
        System.out.println("当前页"+info.getPageNum());
        System.out.println("每页的数量"+info.getPageSize());
        System.out.println("当前页的数量"+info.getSize());
        System.out.println("总页数"+info.getPages());
        System.out.println("上一页"+info.getPrePage());
        System.out.println("下一页"+info.getNextPage());
        //所有导航页号
        int[] nums = info.getNavigatepageNums();
        for (int num : nums) {
            System.out.println("第"+num+"页");
        }
        users.forEach(user -> System.out.println(user));
    }

MyBatis框架-分页的实现_第3张图片

你可能感兴趣的:(mybatis,mybatis)