滚雪球学MyBatis-Plus(07):分页与排序

前言

在上期内容中,我们深入探讨了如何创建服务类和控制器,并通过 RESTful API 提供对外服务。我们学会了如何处理客户端的各种请求并返回相应的结果,这为构建一个完整的 Web 应用程序打下了基础。

本期内容将进一步深入,重点介绍 MyBatis Plus 的分页与排序功能。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。通过配置分页插件和实现排序查询,你将学会如何在项目中高效地管理和展示数据。

一、配置分页插件

分页是处理大量数据时常用的功能。MyBatis Plus 提供了分页插件,简化了分页操作的实现。

  1. MyBatisPlusConfig 类中配置分页插件

    • 打开 src/main/java/com/example/mybatisplusdemo/config/MyBatisPlusConfig.java 文件,添加分页插件配置:
      package com.example.mybatisplusdemo.config;
      
      import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class MyBatisPlusConfig {
      
          @Bean
          public PaginationInterceptor paginationInterceptor() {
              return new PaginationInterceptor();
          }
      }
      
  2. 配置说明

    • PaginationInterceptor:这是 MyBatis Plus 提供的分页拦截器,它会自动识别数据库类型并生成相应的分页 SQL。
二、实现分页查询

接下来,我们将实现分页查询,并在控制器中提供相应的接口。

  1. UserMapper 接口中定义分页查询方法

    • src/main/java/com/example/mybatisplusdemo/mapper/UserMapper.java 文件中定义分页查询方法:
      package com.example.mybatisplusdemo.mapper;
      
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;
      import org.apache.ibatis.annotations.Mapper;
      import org.apache.ibatis.annotations.Select;
      
      @Mapper
      public interface UserMapper extends BaseMapper<User> {
      
          @Select("SELECT * FROM user")
          IPage<User> selectPage(Page<?> page);
      }
      
  2. UserService 接口中定义分页查询方法

    • src/main/java/com/example/mybatisplusdemo/service/UserService.java 文件中定义分页查询方法:
      package com.example.mybatisplusdemo.service;
      
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.service.IService;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;
      
      public interface UserService extends IService<User> {
      
          IPage<User> findAll(Page<User> page);
      }
      
  3. UserServiceImpl 类中实现分页查询方法

    • src/main/java/com/example/mybatisplusdemo/service/impl/UserServiceImpl.java 文件中实现分页查询方法:
      package com.example.mybatisplusdemo.service.impl;
      
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.example.mybatisplusdemo.entity.User;
      import com.example.mybatisplusdemo.mapper.UserMapper;
      import com.example.mybatisplusdemo.service.UserService;
      import org.springframework.stereotype.Service;
      
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      
          @Override
          public IPage<User> findAll(Page<User> page) {
              return baseMapper.selectPage(page);
          }
      }
      
  4. UserController 类中提供分页查询接口

    • src/main/java/com/example/mybatisplusdemo/controller/UserController.java 文件中提供分页查询接口:
      package com.example.mybatisplusdemo.controller;
      
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;
      import com.example.mybatisplusdemo.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RequestMapping("/user")
      public class UserController {
      
          @Autowired
          private UserService userService;
      
          @GetMapping("/list")
          public IPage<User> list(@RequestParam int pageNo, @RequestParam int pageSize) {
              Page<User> page = new Page<>(pageNo, pageSize);
              return userService.findAll(page);
          }
      }
      
  5. 测试分页查询

    • 启动 Spring Boot 项目,使用浏览器或 Postman 访问 http://localhost:8080/user/list?pageNo=1&pageSize=5,查看分页查询结果。
三、实现排序查询

在很多场景下,分页查询通常需要与排序功能结合使用。MyBatis Plus 支持通过 Page 对象来实现排序功能。

  1. UserMapper 接口中修改分页查询方法

    • src/main/java/com/example/mybatisplusdemo/mapper/UserMapper.java 文件中使用默认的 selectPage 方法:
      package com.example.mybatisplusdemo.mapper;
      
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.example.mybatisplusdemo.entity.User;
      import org.apache.ibatis.annotations.Mapper;
      
      @Mapper
      public interface UserMapper extends BaseMapper<User> {
      }
      
  2. UserService 接口和 UserServiceImpl 类中不需要额外修改

    • 使用现有的 findAll 方法即可实现排序查询。
  3. UserController 类中提供排序查询接口

    • src/main/java/com/example/mybatisplusdemo/controller/UserController.java 文件中提供排序查询接口:
      @GetMapping("/listSorted")
      public IPage<User> listSorted(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String sortBy, @RequestParam boolean asc) {
          Page<User> page = new Page<>(pageNo, pageSize);
          page.setAsc(asc);
          page.setOrderByField(sortBy);
          return userService.findAll(page);
      }
      
  4. 测试排序查询

    • 启动 Spring Boot 项目,使用浏览器或 Postman 访问 http://localhost:8080/user/listSorted?pageNo=1&pageSize=5&sortBy=age&asc=true,查看排序查询结果。
四、总结

通过本篇文章,你已经学会了如何在 MyBatis Plus 中配置和实现分页与排序功能。我们通过分页插件简化了分页操作,并通过 Page 对象实现了灵活的排序查询。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。

下期预告

在下一期内容中,我们将深入探讨 MyBatis Plus 的条件构造器。条件构造器能够帮助我们构建复杂的查询条件,使查询操作更加灵活和强大。我们将详细介绍条件构造器的使用方法,并通过实例演示如何在项目中应用这些技巧。敬请期待!

通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bug菌¹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值