Mybatis-分页操作

1.1 项目环境

1.2 limit实现分页

为什么需要分页?

在使用mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,可以通过使用分页进行查询,也就是每次处理小部分数据,这样数据库压力就在可控范围内。

使用Limit实现分页

#级别语法
SELECT * FROM table LIMIT stratIndex,pageSize

# 检索记录行 6-15 
SELECT * FROM table LIMIT 5,10; 

#如果只给定一个参数,它表示返回最大的记录行数目:  
SELECT * FROM table LIMIT 5; //检索前 5 个记录行 

#换句话说,LIMIT n 等价于 LIMIT 0,n。 

UserMapper

// 分页查询
List<User> getUserByLimit(Map<String, Integer> map);

UserMapper.xml

<!--分页操作-->
<select id="getUserByLimit" parameterType="map" resultType="user">
    select * from user limit #{startIndex},#{pageSize}
</select>

1.2.1 代码示例

/*
 *  分页测试
 */
@Test
public void getUserByLimit(){
    
    
    // 1.通过工具类得到会话对象
    SqlSession sqlSession = MybatisUtils.getSession();
    // 2.会话对象的得到mapper接口代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 3.创建Map集合
    HashMap<String, Integer> map = new HashMap<>();
    // 往集合中添加数据
    map.put("startIndex", 0);
    map.put("pageSize", 2);

    List<User> users = mapper.getUserByLimit(map);
    users.forEach(System.out::println);
}

1.2.2 执行结果

1.3 RowBounds分页

除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页。

UserMapper

// RowBounds分页(Java代码实现)
List<User> getUserByRowBounds();

UserMapper.xml

<!--3.分页操作-->
<select id="getUserByRowBounds" resultType="user">
    select * from user
</select>

1.3.1 代码示例

/*
 *  RowBounds类(Java实现)
 */
@Test
public void getUserByRowBounds(){
    
    
    // 1.通过工具类得到会话对象
    SqlSession sqlSession = MybatisUtils.getSession();
    // 2.RowBounds类实现
    RowBounds rowBounds = new RowBounds(1, 2);
    // 3.通过Java代码层面实现分页
    List<User> users = sqlSession.selectList("cn.guardwhy.dao.UserMapper.getUserByRowBounds", null, rowBounds);

    users.forEach(System.out::println);
    // 4.关闭会话
    sqlSession.close();
}

1.3.2 执行结果

1.4 PageHelper插件

PageHelper插件官方地址: https://pagehelper.github.io/

官方文档使用: https://pagehelper.github.io/docs/howtouse/

猜你喜欢

转载自blog.csdn.net/hxy1625309592/article/details/114682729