0%

Mybatis-入门(七)

前言

我们的数据库会被请求很多数据,但是如果数据是很多的时候,我们肯定是分批返回而不是全部返回。所以在实际开发中,我们会对数据进行分页。

分页

分页操作的本质就是MySQL中的 limit 关键字,之前我们检索数据的做法是:

1
select * from users;

实际工作中,我们并不会这么用,因为数据库的数据随着时间的增加肯定是越来越多的,有可能是 1W、10W、100W,但是作为人我们没有办法一次性看这么多,而且性能上也是不允许。一般我们会使用 limit 来对其进行限制

1
-- 这句话就是从头部开始十五条
2
select * from users limit 0, 15;

有了这个基础我们就知道如何写 mybatis 了。无非就是组装这个 sql 嘛。还是将就上一篇文章的项目

1
package com.yubulang.dao;
2
3
import com.yubulang.pojo.User;
4
5
import java.util.List;
6
import java.util.Map;
7
8
public interface UserMapper {
9
    User getUserById(int id);
10
11
    List<User> getUserByPage(Map<String, Integer> map);
12
}

UserMapper.xml

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE mapper
3
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
6
<mapper namespace="com.yubulang.dao.UserMapper">
7
    <select id="getUserById" parameterType="int" resultType="User">
8
        select *
9
        from users
10
        where id = #{id};
11
    </select>
12
13
    <select id="getUserByPage" parameterType="map" resultType="User">
14
        select * from users limit #{offset}, #{pageSize}
15
    </select>
16
</mapper>

测试代码:

1
@Test
2
public void testGetUserByPage() {
3
    SqlSession sqlSession = MybatisUtils.getSqlSession();
4
5
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
6
7
    Map<String, Integer> map = new HashMap<String, Integer>();
8
    map.put("offset", 0);
9
    map.put("pageSize", 2);
10
11
    List<User> userList = mapper.getUserByPage(map);
12
13
    for (User user : userList) {
14
        System.out.println(user);
15
    }
16
17
    sqlSession.close();
18
}

总结

其实分页还有 RowBounds 和分页插件,这个感兴趣的可以自行查询,其实本质都是不变的,就是 SQL 语句 Limit 的控制。