🌱 全面解锁 SpringBoot 集成 Mybatis-Plus!从 LambdaQueryWrapper 到测试用例的实战

举报
bug菌 发表于 2024/10/30 20:50:00 2024/10/30
【摘要】   咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!环境说明:Windows 10 +...

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

🌟 前言

嗨,小伙伴们!最近在项目中,SpringBoot 搭配 Mybatis-Plus 的使用越来越频繁了。为啥?因为它真的方便!不需要重复造轮子,而且查询语法友好。尤其是 LambdaQueryWrapper,让代码清爽很多!今天,就带大家来深入了解一下它的用法,顺便看看实际案例和优缺点,希望对大家的开发之路有所帮助!

📋 摘要

关键词SpringBootMybatis-PlusLambdaQueryWrapperJava开发实战

本文将介绍 SpringBoot 如何优雅地集成 Mybatis-Plus,重点解读 LambdaQueryWrapper 的使用方法。通过实际案例分析和代码示例,帮助大家在开发中更灵活地应用。最后,我们将通过单元测试验证效果,看看是否符合预期。想要一个简单又强大的框架组合?往下看吧!

📖 简介

SpringBoot 本身是一个轻量级的 Java 框架,加速了 Java 项目从创建到生产的过程。而 Mybatis-Plus 作为 Mybatis 的增强工具,能大大简化 CRUD 代码。它最酷的一点是提供了 Lambda 表达式的支持,让代码更符合直觉。本文主要讲述 SpringBoot 集成 Mybatis-Plus,并通过 LambdaQueryWrapper 的实例进行展示。掌握这些知识,能让你的代码更加优雅,开发效率大幅提升。

🧩 概述

在 Java 项目中,将 SpringBoot 与 Mybatis-Plus 集成后,我们可以轻松实现一些复杂的查询逻辑。特别是 LambdaQueryWrapper,让你摆脱传统 SQL 的束缚。以下是本文的主要内容概述:

  1. 核心源码解读:LambdaQueryWrapper 的原理及其在 Mybatis-Plus 中的地位
  2. 案例分析:从零开始配置到查询的完整流程
  3. 应用场景演示:LambdaQueryWrapper 在实际开发中的应用场景
  4. 优缺点分析:两者结合的利与弊
  5. 测试用例与代码分析:验证代码的正确性和有效性
  6. 总结与寄语:希望大家在开发中更高效,能从中受益

📜 核心源码解读

什么是 LambdaQueryWrapper?

LambdaQueryWrapper 是 Mybatis-Plus 提供的一个包装器,它允许我们使用 lambda 表达式来构建查询条件。这种方式的优点是代码更加简洁、清晰,而且避免了拼接字符串的麻烦。通过 LambdaQueryWrapper,我们可以更加灵活地对实体类的字段进行操作,提升了代码的可读性和维护性。

核心方法

以下是 LambdaQueryWrapper 常用的几个方法:

  • eq:等值判断,常用于简单的相等条件。
  • ne:不等值判断,适用于排除某些特定条件。
  • gtlt:大于和小于,用于范围查询。
  • like:模糊查询,匹配包含某个字符的记录。
  • between:范围查询,能指定一个范围的上下限。

示例代码

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, "Alice").like(User::getEmail, "@example.com");

上述代码展示了如何使用 LambdaQueryWrapper 创建查询条件。可以看到,这种方式直观易懂,适合快速开发。

💡 案例分析

在项目中,假设我们有一个用户表 User,需要查询名称为 “Alice” 的用户并且邮箱包含 “@example.com”。如何实现?看看下面代码!

配置

在 SpringBoot 中集成 Mybatis-Plus 相对简单。首先需要在 pom.xml 文件中引入依赖:

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

接着,在 application.yml 中进行数据库配置,确保数据库的连接正常。

实现

接下来,我们可以编写控制器来实现具体的查询逻辑:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/getUser")
    public List<User> getUser() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUsername, "Alice").like(User::getEmail, "@example.com");
        return userService.list(wrapper);
    }
}

这段代码通过 GET 请求来获取符合条件的用户列表。看起来是不是特别简单呢?

  在本次的代码演示中,我将会深入剖析每句代码,详细阐述其背后的设计思想和实现逻辑。通过这样的讲解方式,我希望能够引导同学们逐步构建起对代码的深刻理解。我会先从代码的结构开始,逐步拆解每个模块的功能和作用,并指出关键的代码段,并解释它们是如何协同运行的。通过这样的讲解和实践相结合的方式,我相信每位同学都能够对代码有更深入的理解,并能够早日将其掌握,应用到自己的学习和工作中。

这段代码展示了一个简单的 Spring Boot 控制器,用于通过 HTTP GET 请求获取符合指定条件的用户信息。以下是对这段代码的详细解析:

@RestController
public class UserController {

    // 注入 UserService
    @Autowired
    private UserService userService;

    // 定义 GET 请求映射到 /getUser 路径
    @GetMapping("/getUser")
    public List<User> getUser() {
        // 创建 LambdaQueryWrapper 用于构建查询条件
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        
        // 添加查询条件:用户名为 "Alice" 且邮箱包含 "@example.com"
        wrapper.eq(User::getUsername, "Alice")
               .like(User::getEmail, "@example.com");
        
        // 执行查询并返回符合条件的用户列表
        return userService.list(wrapper);
    }
}
代码细节解析
  1. @RestController
    表明这个类是一个 RESTful 控制器,它会自动将方法的返回值转换为 JSON 格式,适合用于构建 API 接口。

  2. 依赖注入 UserService
    使用 @Autowired 注解,将 UserService 实例自动注入到控制器中。UserService 负责执行用户的相关业务操作。

  3. @GetMapping("/getUser")
    定义一个 GET 请求的映射路径 /getUser,当客户端发送 GET 请求到该路径时,会调用 getUser 方法。

  4. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
    创建了一个 LambdaQueryWrapper 对象,用于构建查询条件。

  5. wrapper.eq(User::getUsername, "Alice").like(User::getEmail, "@example.com");
    通过 LambdaQueryWrapper 链式调用来定义查询条件:

    • .eq(User::getUsername, "Alice"):查找用户名为 “Alice” 的用户。
    • .like(User::getEmail, "@example.com"):查找邮箱包含 “@example.com” 的用户。
  6. return userService.list(wrapper);
    调用 userServicelist 方法,执行查询并返回符合条件的用户列表。返回的列表会自动被转为 JSON 格式发送给客户端。

使用示例

如果启动应用后,通过浏览器或 Postman 访问 http://localhost:8080/getUser,会获得一个 JSON 数组,显示符合条件的用户列表。例如:

[
    {
        "id": 1,
        "username": "Alice",
        "email": "alice@example.com"
    },
    ...
]
小结

这个控制器通过 LambdaQueryWrapper 构建查询条件,查询符合条件的用户列表,并将结果返回为 JSON 数据。使用这种方式可以快速实现简单的 REST API,且代码简洁、易于维护。

🎨 应用场景演示

LambdaQueryWrapper 非常适合用在动态条件查询分页查询链式查询等场景。在实际开发中,比如电商应用中的商品筛选、用户系统中的多条件搜索等,LambdaQueryWrapper 都有很大用武之地。通过动态组装查询条件,我们可以大幅减少代码量,提高效率。

⚖️ 优缺点分析

优点:

  1. 简化代码:不需要手动编写复杂的 SQL,减少了错误。
  2. 支持链式调用:使得代码结构清晰,逻辑更易于追踪。
  3. 避免字符串拼接:使用 lambda 表达式能有效防止拼接错误,提高代码安全性。

缺点:

  1. 灵活性不如原生 SQL:在处理特别复杂的 SQL 时,LambdaQueryWrapper 可能不够灵活。
  2. 学习曲线:对于刚接触 Mybatis-Plus 的开发者,可能需要花时间理解其使用方式。

🛠️ 类代码方法介绍及演示

在使用 LambdaQueryWrapper 时,主要依赖了 Mybatis-Plus 的 BaseMapper。我们定义一个 UserService,利用 BaseMapper 实现基本 CRUD 操作,下面是代码示例:

UserService.java

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> list(LambdaQueryWrapper<User> wrapper) {
        return userMapper.selectList(wrapper);
    }
}

UserMapper.java

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

这里我们定义了 UserService,通过 UserMapper 来访问数据库,获取用户列表。这个结构简单清晰,容易扩展。

🔬 测试用例

测试我们写好的查询功能是否生效。来看下面的测试代码!

public class Main {
    public static void main(String[] args) {
        UserService userService = new UserService();
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUsername, "Alice").like(User::getEmail, "@example.com");

        List<User> users = userService.list(wrapper);
        System.out.println(users);
    }
}

✅ 测试结果预期

测试成功的话,终端会输出符合条件的用户信息,例如:

[User{id=1, username='Alice', email='alice@example.com'}]

通过这种方式,我们能够快速验证我们的代码是否有效。

🔍 测试代码分析

在 main 方法中,我们通过 LambdaQueryWrapper 设置了条件查询。由于代码简单清晰,我们也能一目了然地查看查询条件,且每个方法都在查询语句中生成了对应的条件。这种方式有效提高了开发效率,让我们可以更快速地迭代。

如下是详细解读:

这段代码实现了一个简单的查询,用于在用户服务中查找符合条件的用户。这里是对每一部分的说明:

public class Main {
    public static void main(String[] args) {
        // 创建 UserService 实例
        UserService userService = new UserService();
        
        // 创建 LambdaQueryWrapper 实例并添加查询条件
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUsername, "Alice") // 查找用户名为 "Alice" 的用户
               .like(User::getEmail, "@example.com"); // 并且邮箱包含 "@example.com"
        
        // 使用 UserService 查询符合条件的用户列表
        List<User> users = userService.list(wrapper);
        
        // 输出查询结果
        System.out.println(users);
    }
}

代码细节解析

  1. UserService userService = new UserService();
    这里创建了 UserService 的实例,UserService 是用来处理用户查询和相关操作的服务。

  2. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
    创建了 LambdaQueryWrapper<User> 实例。这个对象可以用来构建查询条件。

  3. wrapper.eq(User::getUsername, "Alice").like(User::getEmail, "@example.com");
    使用 LambdaQueryWrapper 设置条件:

    • .eq(User::getUsername, "Alice"):查找用户名等于 “Alice” 的用户。
    • .like(User::getEmail, "@example.com"):查找邮箱中包含 “@example.com” 的用户。
  4. List<User> users = userService.list(wrapper);
    使用 userServicelist 方法执行查询操作,将符合条件的用户列表保存在 users 中。

  5. System.out.println(users);
    打印查询结果列表到控制台。

预期结果

运行后,程序会输出符合查询条件的 User 对象列表,例如:

[User{id=1, username='Alice', email='alice@example.com'}, ...]

通过这段代码,我们可以在控制台查看到查询结果,验证查询逻辑是否生效。这种使用 LambdaQueryWrapper 组合条件查询的方式,代码简洁而清晰,在项目中可以很方便地应用到各种动态查询场景中。

✍️ 小结

我们通过简单的代码实现了 SpringBoot 集成 Mybatis-Plus 并使用 LambdaQueryWrapper 实现动态查询。是不是超级简单?其实只要掌握了 Mybatis-Plus 的 API,复杂的查询逻辑也变得直观许多。希望这个例子能给大家带来实际帮助!如果能在项目中灵活运用,那真的是太棒了!

🎉 总结

本文讲解了如何将 SpringBoot 与 Mybatis-Plus 集成并使用 LambdaQueryWrapper 实现动态查询。从配置到实际案例,我们一步步拆解,展现出它的优势及不足。希望大家在实际开发中能用到这些内容,少踩坑,多拿成果!真正做到快速开发,优雅编码。

💬 寄语

希望通过本文能帮助大家少走一些弯路,享受编码的乐趣!SpringBoot 和 Mybatis-Plus 的组合真的是不错的选择,尤其是 LambdaQueryWrapper 让代码显得干净利落。快试试看吧,你一定会爱上它!如果在开发过程中有任何问题,欢迎随时交流,我们一起进步!

  …

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,可以参考这篇专栏总结《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。

🌴附录源码

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

☀️建议/推荐你


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

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

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

📣Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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