Mybatis----分页

1.什么是分页

分页(Pagination)是指将大量数据划分为多个页面进行展示的一种技术手段。在数据量较大的情况下,将所有数据一次性显示在页面上会导致加载时间过长和页面过于庞大,影响用户体验和系统性能。分页技术通过划分数据为多个页面,并提供导航控制,使用户可以按需加载和浏览数据。

通常的分页方式是根据指定的每页显示数量,将数据分为多个独立的页,每页呈现一定数量的数据。用户可以通过页码或者上一页、下一页等导航控件来切换不同的页。常见的分页信息包括当前页码、总页数、总记录数等。

如上,当我们在百度上查询的时候,查询结果通常分页展示。而在mybatis中,我们可以使用两种方式实现分页,

一是通过sql语句的limit关键字实现,二是通过Mybatis插件 PageHelper实现

2.sql语句实现分页查询

select * from account limit 起始位置  每页显示数量

如上,我们需要两个关键参数,查询的起始位置,每页显示的最大数量。

测试起始位置为2,每页显示数量最大为3

映射文件:

<select id="selectByPage" resultMap="AccountMap">
    select * from account limit #{offset} ,#{pageNums};
</select>

mapper接口对应的方法:

List<Account> selectByPage(@Param("offset") int offset,@Param("pageNums") int pageNums);

测试方法:

@Test
public void sqlTest3(){
    AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
    List<Account> accounts = accountMapper.selectByPage(2, 3);
    System.out.println(accounts);
}

初始数据:

查询结果:

3. PageHelper实现分页

PageHelper 是一个非常流行的 MyBatis 分页插件,它能够简化基于 MyBatis 的分页查询操作,并提供了丰富的分页查询功能。使用 PageHelper 可以在 MyBatis 中非常便捷地实现分页查询。

PageHelper 提供的功能包括:

  1. 自动进行分页查询,无需手动编写分页 SQL 语句。
  2. 支持多种数据库,如 MySQL、Oracle、SQL Server 等。
  3. 提供丰富的分页参数设置,如页码、页面大小、是否计算总数等。
  4. 支持排序功能,可以方便地指定排序字段和排序方式。

1.导入依赖

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.1.2</version>
</dependency>

2.配置分页拦截器

mybatis核心配置文件中,注意标签的顺序

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3.编写映射文件

<select id="selectByPageHelper" resultMap="AccountMap">
    select * from account
</select>

4.编写接口

List<Account> selectByPageHelper();

5.测试

@Test
public void sqlTest4(){
    AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
    //开启分页功能
    PageHelper.startPage(1, 3);//从第一页开始,页面中条数最大数量为3
    List<Account> accounts = accountMapper.selectByPageHelper();
    System.out.println(accounts);
}

6.结果

在这个实例中我们不用在关系sql中limit关键字,PageHelper已经帮我们实现了,只需开启分页功能。

注意,第一条数据是从0开始的。

4.PageInfo获取分页详细信息

在 MyBatis 分页插件 PageHelper 中,PageInfo 对象是一个非常便利的类,用于包装分页后的结果,提供了获取分页详细信息的各种方法。

@Test
public void sqlTest4(){
    AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
    //开启分页功能
    PageHelper.startPage(1, 3);
    List<Account> accounts = accountMapper.selectByPageHelper();
    PageInfo<Account> pageInfo=new PageInfo<>(accounts);//只需传入
    System.out.println(pageInfo.toString());
    System.out.println(accounts);
}

  • getList():获取当前页的数据列表。
  • getTotal():获取总记录数。
  • getPages():获取总页数。
  • getPageNum():获取当前页的页码。
  • getPageSize():获取每页显示的条目数。
  • isHasNextPage():判断是否有下一页。
  • isHasPreviousPage():判断是否有前一页。
  • getNavigatepageNums():获取所有导航页的页码。
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis是一个优秀的持久层框架,而MyBatis-Plus是在MyBatis基础上进行了扩展和增强的框架。它们都提供了分页功能来方便处理大量数据的查询操作。 在MyBatis中实现分页可以通过使用插件或者自定义SQL语句来实现,而MyBatis-Plus分页,你可以按照以下步骤进行操作: 1. 在你的实体类中添加分页参数,例如`current`表示当前页码,`size`表示每页显示的记录数。 2. 在你的Mapper接口中继承`BaseMapper`接口,该接口提供了一些常用的CRUD方法,包括分页查询方法。 3. 在你的Service层中调用分页查询方法,传入分页参数和查询条件。 4. 在Controller层中接收分页结果,并返回给前端展示。 下面是一个示例代码: ```java // 实体类 public class User { private Long id; private String name; // 省略getter和setter方法 } // Mapper接口 public interface UserMapper extends BaseMapper<User> { // 省略其他方法 } // Service层 @Service public class UserService { @Autowired private UserMapper userMapper; public IPage<User> getUserList(int current, int size) { Page<User> page = new Page<>(current, size); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); // 设置查询条件 // queryWrapper.eq("name", "张三"); return userMapper.selectPage(page, queryWrapper); } } // Controller层 @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public IPage<User> getUserList(@RequestParam(defaultValue = "1") int current, @RequestParam(defaultValue = "10") int size) { return userService.getUserList(current, size); } } ``` 以上示例中,`getUserList`方法实现了分页查询功能,通过调用`selectPage`方法实现分页查询,并将查询结果封装到`IPage`对象中返回给前端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜小白也想的美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值