MyBatis实现分页功能

思考:为什么需要分页

  • 减少数据的处理量
  • 增加页面的可阅读性

1、limit基础使用

# 语法
select * from table limit startIndex,pageSize;
# 从第5条数据开始,显示10行
select * from table limit 4,10;

# limit 第二个参数为-1时,表示从第一个参数开始,查询后面的所有记录
# 现在已经不能使用了,详情见:https://bugs.mysql.com/bug.php?id=2037

#如果只给定一个参数,它表示返回最大的记录行数目:   
select * from table limit 5; //检索前5个记录行  
#等价于select * from table limit 0,5;

2、使用limit实现分页

具体步骤:

  1. 编写Mapper接口

    public interface UserMapper {
        // 分页查询
        List<User> getUserByLimit(Map<String, Integer> map);
    }
    
  2. 编写Mapper.xml文件

    <select id="getUserByLimit" parameterType="map" resultMap="userMap">
        select *
        from mybatis.user
        limit #{startIndex},#{pageSize}
    </select>
    
  3. 测试类中传入参数

    @Test
    public void getUserByLimit() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Integer> map = new HashMap<>();
        map.put("startIndex",1);
        map.put("pageSize",2);
        List<User> userList = userMapper.getUserByLimit(map);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    

3、使用RowBounds分页

​ 我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页,当然此种方式作为了解即可,此种方式现在已经不推荐使用

具体步骤:

  1. 定义Mapper接口

    public interface UserMapper {
        List<User> getUserByRowBounds();
    }
    
  2. 编写Mapper.xml文件

    <select id="getUserByRowBounds" resultMap="userMap">
        select *
        from mybatis.user
    </select>
    
  3. 编写测试类,使用RowBounds

    @Test
    public void getUserByRowBounds() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        int currentPage = 2;  //第几页
        int pageSize = 2;  //每页显示几个
        int startIndex = (currentPage - 1) * pageSize; // 从第几行开始查询
        RowBounds rowBounds = new RowBounds(startIndex,pageSize);
        //通过session.**方法进行传递rowBounds,[此种方式现在已经不推荐使用了]
        List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserByRowBounds", null, rowBounds);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    

4、使用分页插件分页

使用pageHelper插件进行分页

image-20210109114538852

官网:https://mybatis.io/

了解即可,万一以后公司的架构师说要使用,你需要知道它!

posted @ 2021-01-09 11:50  天下御免  阅读(1004)  评论(0编辑  收藏  举报