如何使用MyBatis-Plus快速实现自定义SQL分页?

举报
bug菌 发表于 2023/10/11 17:41:11 2023/10/11
【摘要】 🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。


🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。

本专栏致力打造最硬核Spring Boot 系列教程,从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

前言

在Web应用中,分页是非常常见的需求。MyBatis-Plus是基于MyBatis的一款插件,提供了丰富的快速开发功能。本文将介绍如何使用MyBatis-Plus的自定义sql分页功能来进行分页操作。

前置知识

  • Spring Boot基础知识
  • MyBatis-Plus基础知识
  • MySQL基础知识

基本思路

MyBatis-Plus提供了自定义sql分页的实现方式,基本思路如下:

  1. 通过自定义sql查询出总记录数。

  2. 根据总记录数和每页显示数计算出总页数。

  3. 根据页码、每页显示数和总记录数计算出当前页需要查询的记录行数。

  4. 使用自定义sql进行分页查询。

  5. 将查询结果和分页信息封装成Page对象返回。

环境准备

在开始之前,需要准备好以下环境:

  • JDK 1.8+
  • Spring Boot 2.0+
  • MyBatis-Plus 3.0+
  • MySQL 5.7+

实现步骤

1. 添加MyBatis-Plus依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>

2. 配置MyBatis-Plus

在application.properties文件中添加以下配置:

# 数据库连接配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

# MyBatis-Plus配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.type-aliases-package=com.example.demo.entity

3. 编写Mapper

创建UserMapper.java文件,并通过注解的方式声明自定义sql查询方法:

@Mapper
public interface UserMapper extends BaseMapper<User> {

    @Select("select count(*) from user")
    Integer selectCount();

    @Select("select * from user limit #{offset}, #{size}")
    List<User> selectPage(@Param("offset") Integer offset, @Param("size") Integer size);

}

4. 编写Service

创建UserService.java文件,并实现分页查询方法:

@Service
public class UserService {

    @Autowired
    UserMapper userMapper;

    public Page<User> selectPage(Integer current, Integer size) {
        // 查询总记录数
        Integer count = userMapper.selectCount();
        // 计算总页数
        Integer pageCount = (count - 1) / size + 1;
        // 计算当前页需要查询的记录行数
        Integer offset = (current - 1) * size;
        // 查询当前页记录
        List<User> userList = userMapper.selectPage(offset, size);
        // 构建Page对象
        Page<User> page = new Page<>(current, size, count);
        page.setRecords(userList);
        return page;
    }

}

5. 测试分页查询

创建UserController.java文件,并添加分页查询接口:

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @GetMapping("/users")
    public Page<User> selectPage(@RequestParam(defaultValue = "1") Integer current, @RequestParam(defaultValue = "10") Integer size) {
        return userService.selectPage(current, size);
    }

}

启动应用后,访问http://localhost:8080/users即可进行分页查询。

测试用例

为了验证分页查询的正确性,我们可以编写如下的测试用例:

@SpringBootTest
class UserServiceTest {

    @Autowired
    UserService userService;

    @Test
    public void testSelectPage() {
        Integer current = 2;
        Integer size = 10;
        Page<User> page = userService.selectPage(current, size);
        Assert.assertEquals(current, page.getCurrent());
        Assert.assertEquals(size, page.getSize());
        Assert.assertNotNull(page.getRecords());
    }

}

除此之外,你也可以使用在线接口测试接口返回值,例如查看swagger返回值,具体请看如下截图,明显可以看到分页参数皆已成功返回,具体数据条是被自动封存在records集合中,这里就不一一展示啦。

具体截图所示:

在这里插入图片描述
查看接口返回值,分页参数也是无误的,如果存在偶然,可以再次传不同的分页参数进行自验。要我说,mp的是分页是准确无误的,所以请大家放心品尝吧。

小结

本文主要介绍了如何使用MyBatis-Plus的自定义sql分页实现分页查询,并提供了完整的示例代码。通过本文的学习,读者可以深入了解MyBatis-Plus的分页功能,掌握自定义sql分页的使用方法。

总结

本文详细介绍了使用MyBatis-Plus插件实现自定义sql分页的方法,并且提供了完整的示例代码。在分页查询中,自定义sql分页是非常常用的方式,通过自定义sql语句可以更灵活地满足不同的查询需求。使用MyBatis-Plus插件可以极大地简化分页查询的开发工作,提高开发效率。读者可以通过本文的介绍,深入了解MyBatis-Plus的分页功能,并掌握自定义sql分页的使用方法。

附录源码

  如上涉及所有源码均已上传同步在「GitHub」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你


无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Spring Boot」,从入门到精通,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。