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

【工作笔记】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.lryc.cn/news/617874.html

相关文章:

  • ROS2学习(1)—基础概念及环境搭建
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • vscode新建esp32工程,没有sample_project怎么办?
  • 计算机网络:ovn数据通信都是用了哪些协议?
  • 应用层模拟面试题
  • C语言(06)——二、八、十、十六进制的相互转换
  • Effective C++ 条款35:考虑 virtual函数以外的其他选择
  • 【已解决】报错:WARNING: pip is configured with locations that require TLS/SSL
  • HarmonyOS 开发入门 第一章
  • 一文读懂 C# 中的 Lazy<T>
  • Python 在自动化办公汇总和脚本示例
  • 本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • Linux线程——线程控制及理解
  • Transformer前传:Seq2Seq与注意力机制Attention
  • Haystack:面向大模型应用的模块化检索增强生成(RAG)框架
  • 什么情况下会导致日本服务器变慢?解决办法
  • Linux kernel network stack, some good article
  • Flink + Hologres构建实时数仓
  • Spring JDBC
  • TDengine IDMP 基本功能(1.界面布局和操作)
  • 【华为机试】208. 实现 Trie (前缀树)
  • openGauss逻辑备份恢复工具gs_dump/gs_restore
  • AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”
  • 大模型落地实践:从技术重构到行业变革的双重突破
  • 亚马逊广告底层逻辑重构:从流量博弈到价值创造的战略升维
  • 思科交换机的不同级别IOS软件有什么区别?
  • Oracle数据库中的Library cache lock和pin介绍
  • Qt——实现”Hello World“、认识对象树与Qt坐标系
  • 力扣109:有序链表转换二叉搜索树