MyBatis 是一个开源、轻量级的数据持久化框架,它相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,那mybatis怎么分页?下面来我们就来给大家讲解一下mybatis分页功能的案例。
1.使用limit分页
很容易想到的是通过Mybatis的xml文件写sql语句使用limit关键字分页
语法: select * from user limit startIndex,pageSize;
上面的语句表示:从下标startIndex开始,取pageSize个数据出来(startIndex下标从0开始)
如果sql语句只写一个参数:
select * from user limit 3;
那如何使用Mybatis实现分页呢?
使用Mybatis实现分页的核心还是上面的分页sql语句
1.接口
//分页 List < User > getUserByLimit(Map < String, Integer > map);
2.Mapper.xml
<!--分页--> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from user limit #{startIndex},#{pageSize} </select>
3.测试
@Test public void getUserByLimitTest() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map < String, Integer > map = new HashMap < > (); map.put("startIndex", 1); map.put("pageSize", 2); List < User > userList = mapper.getUserByLimit(map); for (User user: userList) { System.out.println(user); } sqlSession.close(); }
2.使用RowBounds类分页
上面使用limit分页并没有体现java面向对象的思想,就出现了这个类来分页(不建议开发中使用这个)
不再使用SQL实现分页
1.接口
//RowBounds分页 List < User > getUserByRowBounds();
2.mapper.xml
<!--RowBounds分页,直接全查,java代码写分页,但RowBounds还是物理分页,不是内存分页--> <select id="getUserByRowBounds" resultMap="UserMap"> select * from user </select>
3.测试
@Test public void getUserByRowBoundsTest() { SqlSession sqlSession = MybatisUtils.getSqlSession(); //RowBounds实现,从下标1(startIndex)开始,取2个(pageSize) RowBounds rowBounds = new RowBounds(1, 2); //通过java代码层面实现分页 List < User > userList = sqlSession.selectList( "com.kuang.dao.UserMapper.getUserByRowBounds", null, rowBounds); for (User user: userList) { System.out.println(user); } sqlSession.close(); }
MyBatis 分页功能就是以上两种方法,MyBatis 的分页功能是基于内存的分页,即先查询出所有记录,再按起始位置和页面容量取出结果。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: