欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

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

2025年07月13日 Java
核心概括:lambdaquerywrapper 本质上是一个条件包装器(与wrapper类似),而 mapper 方法(如 selectlist)负责补充完整的 sql 结构在 java 后端开发中(

核心概括: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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!