【面试题】MyBatis是如何分页的,分页插件的原理是什么?

MyBatis是如何分页的,分页插件的原理是什么?

1.使用Map来进行包装数据实现分页功能

  1. 使用RowBounds来实现分页

1.使用Map来进行包装数据实现分页功能

SQL映射



DAO实现类

//这个是实现分页查询功能(用map来实现的第一种方式)
public List getAll(int currentPage,int pageSize) throws IOException {
    SqlSession  sqlSession = MybatisUtil.getSession();
    Map map = new HashMap();
    map.put("startIndex",(currentPage-1)*pageSize);
    map.put("pageSize",pageSize);
    List list = sqlSession.selectList("UserMapper.getAllMap",map);
    sqlSession.close();
    return list;
}

测试类

public static void main(String[] args) throws IOException {
    UserDao userDao = new UserDao();
    //这个传进来的第一个参数是你要显示第几页的数据,第二是你需要没页显示几条记录
    List list = userDao.getAll(2, 3);
    for (User user : list) {
        System.out.println(user.toString());
    }
}

2. 使用RowBounds来实现分页

SQL的xml映射



DAO实现类

//这个是通过RowBounds来实现查询功能的分页操作
public List getAllRowBounds(int currentPage,int pageSize) throws IOException {
    SqlSession sqlSession = MybatisUtil.getSession();
    /*rowBounds需要的第一个参数就是从数据的哪个下标开始开始查,第二个就是你需要查询的条数*/
    RowBounds rowBounds= new RowBounds((currentPage-1)*pageSize,pageSize);
    List list = sqlSession.selectList("UserMapper.getAllRowBounds",
            null, rowBounds);
    sqlSession.close();
    return list;
}

测试类

public class TestRowBounds {
    public static void main(String[] args) throws IOException {
        UserDao userDao = new UserDao();
        List list = userDao.getAllRowBounds(1, 3);
        for (User user : list) {
            System.out.println(user.toString());
        }
    }
}

分页插件的原理

  • 基于拦截器拦截待执行SQL语句,然后修改最终执行SQL语句。属于物理分页

你可能感兴趣的:(【面试题】MyBatis是如何分页的,分页插件的原理是什么?)