MyBatis-Plus中的LambdaQuery用法实例详解

 更新时间:2025年07月12日 10:38:07   作者:野犬寒鸦  
LambdaQueryWrapper是MyBatis-Plus的类型安全查询工具,通过Lambda表达式简化条件构建,避免硬编码字段名,提升代码可读性、维护性及重构友好性,适用于单表查询场景,本文给大家介绍MyBatis-Plus中的LambdaQuery用法,感兴趣的朋友一起看看吧

核心概括:LambdaQueryWrapper 本质上是一个条件包装器(与wrapper类似),而 Mapper 方法(如 selectList)负责补充完整的 SQL 结构

在 Java 后端开发中(特别是使用 MyBatis-Plus 框架时),LambdaQuery() 是一种基于 Lambda 表达式的类型安全查询方式,它利用 Java 8 的 Lambda 特性,避免了硬编码字段名,提升了代码可读性和可维护性。

核心优势

  1. 类型安全:编译器检查字段引用,避免拼写错误
  2. 代码可读性:链式调用,语义清晰
  3. 重构友好:字段名修改后 IDE 自动更新 Lambda 引用

基本使用步骤(MyBatis-Plus 示例)

1. 创建 Lambda 查询包装器

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
// 泛型指定实体类型
LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();

2. 链式构建查询条件

lambdaQuery
    .eq(User::getName, "John")      // WHERE name = 'John'
    .gt(User::getAge, 18)           // AND age > 18
    .like(User::getEmail, "@gmail") // AND email LIKE '%@gmail%'
    .orderByDesc(User::getCreateTime); // ORDER BY create_time DESC

3. 执行查询

// 注入 Mapper(MyBatis-Plus 的 BaseMapper)
@Autowired
private UserMapper userMapper;
public List<User> queryUsers() {
    return userMapper.selectList(lambdaQuery);
}

常用方法详解 & 示例

假设有 User 实体类:

public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private LocalDateTime createTime;
    // 省略 getter/setter
}

1. 等值查询(eq)

lambdaQuery.eq(User::getName, "Alice"); // WHERE name = 'Alice'

2. 模糊查询(like)

lambdaQuery.like(User::getEmail, "hotmail"); // WHERE email LIKE '%hotmail%'

3. 范围查询(between)

// 查询年龄在 20~30 的用户
lambdaQuery.between(User::getAge, 20, 30); // WHERE age BETWEEN 20 AND 30

4. 嵌套条件(and/or)

lambdaQuery
    .eq(User::getAge, 25)
    .and(q -> q
        .like(User::getName, "Tom")
        .or()
        .eq(User::getEmail, "tom@example.com")
    );
// WHERE age = 25 AND (name LIKE '%Tom%' OR email = 'tom@example.com')

5. 排序(orderBy)

lambdaQuery
    .orderByAsc(User::getAge)    // 年龄升序
    .orderByDesc(User::getId);   // ID降序
// ORDER BY age ASC, id DESC

6. 选择字段(select)

lambdaQuery
    .select(User::getId, User::getName) // 只查询 id 和 name 字段
    .like(User::getName, "A");
// SELECT id, name FROM user WHERE name LIKE '%A%'

7. 动态条件(避免 if 判断)

public List<User> queryUsers(String name, Integer minAge) {
    return new LambdaQueryWrapper<User>()
        .eq(StringUtils.isNotBlank(name), User::getName, name)
        .gt(minAge != null, User::getAge, minAge)
        .list();
}
// 当 name 非空时添加 name 条件,当 minAge 非空时添加 age 条件

完整示例场景

需求: 查询邮箱包含 "google"、年龄 ≥ 25、按创建时间倒序的前 10 条用户 Java 代码:

List<User> users = new LambdaQueryWrapper<User>()
    .like(User::getEmail, "google")
    .ge(User::getAge, 25)         // ge = greater or equal (>=)
    .orderByDesc(User::getCreateTime)
    .last("LIMIT 10")             // 特殊 SQL 拼接
    .list();                      // 执行查询

注意事项

  1. LambdaQueryWrapper 需要 MyBatis-Plus 3.x+
  2. 实体类需有 Getter 方法(Lambda 基于方法引用)
  3. 复杂 SQL(如多表联查)建议仍用 XML/注解方式
  4. 避免在循环中频繁创建 LambdaQueryWrapper 对象

通过 LambdaQuery 可以大幅减少 SQL 拼接的错误率,让查询代码更加简洁优雅。它是现代 Java 后端开发中处理单表查询的首选方式。

到此这篇关于MyBatis-Plus的LambdaQuery用法的文章就介绍到这了,更多相关MyBatis-Plus LambdaQuery用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合SpringSecurity实现认证拦截的教程

    SpringBoot整合SpringSecurity实现认证拦截的教程

    我们写的任何一个项目,都应该有安全防护,不应该让这个项目进行“裸奔”,否则很容易被别人进行攻击。而在SpringBoot环境中,其实可以很容易实现安全保护,本文给大家介绍SpringBoot如何整合SpringSecurity实现认证拦截,需要的朋友可以参考下
    2023-05-05
  • Springboot自动加载配置的原理解析

    Springboot自动加载配置的原理解析

    Springboot遵循“约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来,这篇文章主要给大家介绍了关于Springboot自动加载配置原理的相关资料,需要的朋友可以参考下
    2021-10-10
  • SpringBoot自定义Starter实现流程详解

    SpringBoot自定义Starter实现流程详解

    SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰
    2022-09-09
  • java实现在性能测试中进行业务验证实例

    java实现在性能测试中进行业务验证实例

    这篇文章主要为大家介绍了java实现在性能测试中进行业务验证实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 关于idea2022.2 闪退的问题

    关于idea2022.2 闪退的问题

    最近更新了idea2022.2版本,这是一个比较大的软件版本更迭,下面小编给大家介绍下idea2022.2 闪退的问题及解决方法,需要的朋友可以参考下
    2022-08-08
  • Java基于LoadingCache实现本地缓存的示例代码

    Java基于LoadingCache实现本地缓存的示例代码

    本文主要介绍了Java基于LoadingCache实现本地缓存的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java雪花算法的原理和实现方法

    Java雪花算法的原理和实现方法

    这篇文章主要介绍了Java雪花算法的原理和实现方法,雪花算法是一种分布式唯一ID生成算法,可以生成全局唯一的ID标识符,就像自然界中雪花一般没有相同的雪花,下面将详细介绍,感兴趣的可以学习一下
    2023-10-10
  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    对于一个帐号在同一时间只能一个人登录,下文给大家介绍的非常详细,对java web qq 登录功能感兴趣的朋友一起看看吧
    2016-11-11
  • Spring关闭Tomcat Servlet容器时内存泄漏问题解决方案

    Spring关闭Tomcat Servlet容器时内存泄漏问题解决方案

    这篇文章主要介绍了Spring关闭Tomcat Servlet容器时内存泄漏问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java操作redis设置第二天凌晨过期的解决方案

    Java操作redis设置第二天凌晨过期的解决方案

    这篇文章主要介绍了Java操作redis设置第二天凌晨过期的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论