当前位置: 代码网 > it编程>编程语言>Java > MyBatis-Plus中的LambdaQuery用法实例详解

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com