前言
在上期内容中,我们深入探讨了如何创建服务类和控制器,并通过 RESTful API 提供对外服务。我们学会了如何处理客户端的各种请求并返回相应的结果,这为构建一个完整的 Web 应用程序打下了基础。
本期内容将进一步深入,重点介绍 MyBatis Plus 的分页与排序功能。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。通过配置分页插件和实现排序查询,你将学会如何在项目中高效地管理和展示数据。
一、配置分页插件
分页是处理大量数据时常用的功能。MyBatis Plus 提供了分页插件,简化了分页操作的实现。
-
在
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(); } }
- 打开
-
配置说明:
PaginationInterceptor
:这是 MyBatis Plus 提供的分页拦截器,它会自动识别数据库类型并生成相应的分页 SQL。
二、实现分页查询
接下来,我们将实现分页查询,并在控制器中提供相应的接口。
-
在
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); }
- 在
-
在
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); }
- 在
-
在
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); } }
- 在
-
在
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); } }
- 在
-
测试分页查询:
- 启动 Spring Boot 项目,使用浏览器或 Postman 访问
http://localhost:8080/user/list?pageNo=1&pageSize=5
,查看分页查询结果。
- 启动 Spring Boot 项目,使用浏览器或 Postman 访问
三、实现排序查询
在很多场景下,分页查询通常需要与排序功能结合使用。MyBatis Plus 支持通过 Page
对象来实现排序功能。
-
在
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> { }
- 在
-
在
UserService
接口和UserServiceImpl
类中不需要额外修改:- 使用现有的
findAll
方法即可实现排序查询。
- 使用现有的
-
在
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); }
- 在
-
测试排序查询:
- 启动 Spring Boot 项目,使用浏览器或 Postman 访问
http://localhost:8080/user/listSorted?pageNo=1&pageSize=5&sortBy=age&asc=true
,查看排序查询结果。
- 启动 Spring Boot 项目,使用浏览器或 Postman 访问
四、总结
通过本篇文章,你已经学会了如何在 MyBatis Plus 中配置和实现分页与排序功能。我们通过分页插件简化了分页操作,并通过 Page
对象实现了灵活的排序查询。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。
下期预告
在下一期内容中,我们将深入探讨 MyBatis Plus 的条件构造器。条件构造器能够帮助我们构建复杂的查询条件,使查询操作更加灵活和强大。我们将详细介绍条件构造器的使用方法,并通过实例演示如何在项目中应用这些技巧。敬请期待!
通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!