分页
为什么要分页?
当我们数据量太大时,一次性查询数据耗时较久,影响用户体验。分页可以减少数据的处理量,提高效率
limit实现分页
limit语法:
#语法 从第n+1条数据开始(下标从0开始),每页显示几条数据
SELECT * FROM table LIMIT stratIndex,pageSize
SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 从第6条数据开始,每页显示10条数据
#如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM table LIMIT 5; //检索前 5 个记录行
#换句话说,LIMIT n 等价于 LIMIT 0,n。
步骤:
1、mapper接口
//多个参数使用万能的Map
List<User> selectUser(Map<String,Integer> map);
2、mapper映射文件
<select id="selectUser" parameterType="map" resultType="user">
select * from user limit #{startIndex},#{pageSize}
</select>
3、测试
@Test
public void getUserLimit(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex",1);
map.put("pageSize",3);
List<User> userList = mapper.getUserLimit(map);
for (User user: userList){
System.out.println(user);
}
sqlSession.close();
}
RowBounds分页
我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页,当然此种方式作为了解即可。我们来看下如何实现的!
步骤:
1、mapper接口
//选择全部用户RowBounds实现分页
List<User> getUserByRowBounds();
2、mapper映射文件
<select id="getUserByRowBounds" resultType="user">
select * from user
</select>
3、测试
这里,我们需要使用RowBounds类
@Test
public void testUserByRowBounds() {
SqlSession session = MybatisUtils.getSession();
RowBounds rowBounds = new RowBounds(1,2);
//通过session.**方法进行传递rowBounds,[此种方式现在已经不推荐使用了]
List<User> users = session.selectList("com.h.mapper.UserMapper.getUserByRowBounds", null, rowBounds);
for (User user: users){
System.out.println(user);
}
session.close();
}
其他实现方式
Mybatis的分页插件PageHelper 点我跳转至官网