开发者

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

目录
  • 核心优势
  • 基本使用步骤(MyBATis-Plus 示例)
    • 1. 创建 Lambda 查询包装器
    • 2. 链式构建查询条件
    • 3. 执行查询
  • 常用方法详解 & 示例
    • 1. 等值查询(eq)
    • 2. 模糊查询(like)
    • 3. 范围查询(between)
    • 4. 嵌套条件(and/or)
    • 5. 排序(orderBphpy)
    • 6. 选择字段(select)
    • 7. 动态条件(避免 if 判断)
  • 完整示例场景
    • 注意事项

      核心概括: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. www.devze.com动态条件(避免 phpif 判断)

      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用法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜