当前位置: 首页 > java >正文

【工作笔记】Wrappers.lambdaQuery()用法

Wrappers.lambdaQuery() 是 MyBatis-Plus 提供的 “一行代码构造查询条件” 的快捷工具。
它返回一个 LambdaQueryWrapper<T>,好处是完全类型安全、无硬编码字符串,IDE 还能自动补全字段。


1. 最常用 3 步

// 1. 创建 Wrapper
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class);// 2. 链式拼条件
wrapper.eq(Order::getStatus, 1).between(Order::getCreateTime, start, end).likeRight(Order::getCustomer, "ABC");// 3. 丢给 Mapper
List<Order> list = orderMapper.selectList(wrapper);

一行写法:

List<Order> list = orderMapper.selectList(Wrappers.<Order>lambdaQuery().eq(Order::getStatus, 1).between(Order::getCreateTime, start, end)
);

2. 条件大全(几乎覆盖所有 SQL 片段)

方法对应 SQL示例
eq=.eq(User::getAge, 18)
ne<>.ne(User::getStatus, 0)
gt / ge> / >=.gt(User::getScore, 60)
lt / le< / <=.le(User::getBirthday, now)
like / likeLeft / likeRightLIKE '%xx%' / '%xx' / 'xx%'.like(User::getName, "张")
in / notInIN (...).in(User::getId, idList)
isNull / isNotNullIS NULL.isNull(User::getEmail)
betweenBETWEEN a AND b.between(User::getAge, 18, 30)
orderByAsc / orderByDescORDER BY.orderByDesc(User::getCreateTime)
last末尾直接拼 SQL(慎用).last("limit 1")

3. 动态条件(if/else 场景)

LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery();
if (status != null) {wrapper.eq(Order::getStatus, status);
}
if (StringUtils.isNotBlank(keyword)) {wrapper.like(Order::getCustomer, keyword);
}

4. 与 new LambdaQueryWrapper<>() 的区别

  • new LambdaQueryWrapper<>() 需要手动 new
  • Wrappers.lambdaQuery() 本质是静态工厂,代码更短,还能自动推断泛型。

等价写法:

LambdaQueryWrapper<Order> w1 = new LambdaQueryWrapper<>();
LambdaQueryWrapper<Order> w2 = Wrappers.lambdaQuery(Order.class);

5. 与 QueryWrapper 的对比

对比点QueryWrapperLambdaQueryWrapper
拼字段字符串 "name"方法引用 User::getName
安全性易拼错编译期检查
IDE 提示自动补全

conclusion

Wrappers.lambdaQuery() 就是 MyBatis-Plus 提供的“类型安全、链式、零字符串硬编码”的查询条件构造器。会用这一个,基本就不用再手写 XML 里的 <where><if> 了。

http://www.xdnf.cn/news/17585.html

相关文章:

  • RK3588在YOLO12(seg/pose/obb)推理任务中的加速方法
  • JS数组排序算法
  • 打靶日常-upload-labs(21关)
  • 【密码学】8. 密码协议
  • Android 开发问题:Invalid id; ID definitions must be of the form @+id/ name
  • 【系统分析师】软件需求工程——第11章学习笔记(上)
  • A#语言详解
  • GitHub上为什么采用Gradle编译要多于Maven
  • 【走进Docker的世界】深入理解Docker网络:从模式选择到实战配置
  • AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
  • 【代码随想录day 15】 力扣 404. 左叶子之和
  • nginx+Lua环境集成、nginx+Lua应用
  • 自动化备份全网服务器数据平台
  • UE材质World Position 和 Object Position
  • Linux操作系统从入门到实战(十七)进程与进程基本概念
  • Redis一站式指南一:从MySQL事务到Redis持久化及事务实现
  • Error: error:0308010C:digital envelope routines::unsupported at new Hash
  • 计算机视觉(CV)——pytorch张量基本使用
  • 青龙峡拔韭菜
  • 【东枫科技】NTN-IOT 卫星互联网原型系统,高达1.6G大带宽
  • 免费数字人API开发方案
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • How Websites Work 网站如何运作
  • Linux入门指南:26个基础命令全解析
  • C语言(长期更新)第10讲:操作符详解(二)
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • playwright-mcp 项目全解析:从理论到实践
  • 量子计算机实用化:从理论到现实的艰难跨越
  • (一)Tailwindcss
  • Win10清理C盘步骤