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

LambdaQueryWrapper解释一下

LambdaQueryWrapper 是 MyBatis-Plus 框架中的一个核心查询构造器,使用的是Lambda表达式来构建安全的sql查询条件,避免了硬编码字段名,

传统硬编码方式的问题

传统写法(硬编码字段名)/;

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三")  // "name"是字符串形式的字段名
       .gt("age", 18);     // "age"是字符串形式的字段名

LambdaQueryWrapper 的解决方案

LambdaQueryWrapper 使用 Lambda 表达式方法引用来代替字符串字段名:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三")  // 使用方法引用
       .gt(User::getAge, 18);     // 使用方法引用

LambdaQueryWrapper 是 QueryWrapper 的 Lambda 表达式版本

  1. 类型安全:通过 Lambda 方法引用替代字符串字段名

  2. 防止拼写错误:IDE 可以自动补全和检查

  3. 可读性更好:链式调用更清晰表达查询逻辑

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三")
       .ge(User::getAge, 18)
       .orderByDesc(User::getCreateTime);

List<User> users = userMapper.selectList(wrapper);

常用方法

eq()等于=
ne()不等于<>
gt()大于>
ge()大于等于>=
lt()小于<
le()小于等于<=
like()模糊匹配LIKE
in()IN 查询IN
isNull()NULL 值查询IS NULL
orderByAsc()升序排序ORDER BY ASC
orderByDesc()降序排序ORDER BY DESC

SQL 对应的 LambdaQueryWrapper 示例

SELECT ar.id, ar.account_id, ar.role_id
FROM t_account_role ar
INNER JOIN t_account a ON ar.account_id = a.account_id AND a.status = 0
WHERE ar.account_id = #{accountId}

对应的 LambdaQueryWrapper 写法:

LambdaQueryWrapper<AccountRole> wrapper = new LambdaQueryWrapper<>();
wrapper.select(AccountRole::getId, AccountRole::getAccountId, AccountRole::getRoleId)
       .eq(AccountRole::getAccountId, accountId)
       .inSql(AccountRole::getAccountId, 
           "SELECT account_id FROM t_account WHERE status = 0");

List<AccountRole> accountRoles = accountRoleMapper.selectList(wrapper);

注意:对于复杂的 JOIN 操作,LambdaQueryWrapper 支持有限,可能需要配合自定义 SQL 使用。

http://www.dtcms.com/a/106432.html

相关文章:

  • Ubuntu 20.04 中 Git 的安装、配置和基本操作指南
  • Element Plus 主题色定制指南:从原理到实战
  • Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
  • L2-001 紧急救援
  • 编译原理:first集和follow
  • Python数据类型 - 元组(Tuple)
  • 第四章:检索器(Retriever)设计:从向量到图谱
  • Windows 实战-evtx 文件分析--做题笔记
  • Qt中的数据解析--XML与JSON处理全攻略
  • 前端开发时的内存泄漏问题
  • 数据结构第6篇:手撕排序算法(插入、希尔、堆)
  • 【通用级联选择器回显与提交处理工具设计与实现】
  • 中和农信:让金融“活水”精准浇灌乡村沃土
  • RustDesk 开源远程桌面软件 (支持多端) + 中继服务器伺服器搭建 ( docker版本 ) 安装教程
  • windows使用Python调用7-Zip【按大小分组】压缩文件夹中所有文件
  • C# Winform 入门(3)之尺寸同比例缩放
  • 山东大学《多核平台下的并行计算》实验笔记
  • Mysql+Demo 获取当前日期时间的方式
  • 17查询文档的方式
  • CASAIM与哈尔滨电气集团达成战略合作,三维智能检测技术赋能电机零部件生产智造升级
  • 【DRAM存储器四十九】LPDDR5介绍--LPDDR5的低功耗技术之power down、deep sleep mode
  • ContextVars 在 FastAPI 中的使用
  • 最新26考研资料分享考研资料合集 百度网盘(仅供参考学习)
  • 逻辑漏洞之越权访问总结
  • LeetCode 2761 和等于目标值的质数对
  • Anywhere文章精读
  • c# 如何利用redis存储对象,并实现快速查询
  • 实时显示符合条件的完整宋词
  • 基于 DeepSeek 与天地图搭建创新地理信息应用
  • STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步