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 使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值