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

Mybatis-Plus的LambdaWrapper

在MP中,Lambdawrapper是一种较为特殊的包装器,主要的功能是用于解耦sql语句。

比如,我们要查询一个表中,balance字段大于100的数据内容,返回为对应的字段a\b\c

那么在使用wrapper包装器的时候,我们的语句是:

QueryWrapper<Entity> wrapper = new QueryWrapper<Entity>();wrapper.select("a","b","c").gt("balance",100);List<Entity> list = selectList(wrapper);

而当我们使用LambdaWrapper时,效果是:

LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper<Entity>();wrapper.select(()->Entity.getA,()->Entity.getB,()->Entity.getC).gt("balance",100);List<Entity> list = selectList(wrapper);

注意在select中只能传递函数Function,目前对函数部分的理解并不深刻。

现在的理解是引入函数变成,相当于在面向对象编程中引入了面向过程编程的形式,免去了面向对象编程重复创建对象的开发成本。对于这部分只使用很少次数的行为,直接使用函数表达式来进行编程即可。

可以简单猜测一下底层干的事,用函数拿到了实体对应的属性内容,底层通过某种机制去反向窃取到表的字段名。(前提是:按照驼峰与下划线的约定编写实体属性与字段名)

2.MP用法的不规范

在企业开发中,MP很多的代码会出现在Service层,但按照基本规范来说,不应该在service层出现持久层的代码,应将这部分调用至Mapper层中。所以现在很多公司不太建议或者直接禁止使用MP

为了能够使用MP,可以将复杂的where语句用MP包装,其余语句使用标签的形式直接在mapper接口中书写,那么效率依然能提升。

下面的例子采用的是xml注解形式

    @Testpublic void testMPSegment(){List<Long>  ids= List.of(1L, 2L, 4L);int amount = 200;Wrapper<User> wrapper = new QueryWrapper<User>().in("id", ids);userMapper.updateBalanceByIds(wrapper,amount);}@Mapper
public interface UserMapper extends BaseMapper<User> {void updateBalanceByIds(@Param(Constants.WRAPPER) Wrapper<User> wrapper, @Param("amount") int amount);
}<update id="updateBalanceByIds">UPDATE user<set>balance = balance + #{amount}</set>${ew.customSqlSegment}</update>

这里需要注意的是必须在mapper方法中将参数用标签@Param("ew")进行标记,这里的Constant.wrapper对应的就是ew

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

相关文章:

  • 嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
  • 将数据库表导出为C#实体对象
  • EMC测试
  • 6月7日day47打卡
  • [ACTF2020 新生赛]Include 1(php://filter伪协议)
  • 嵌入:AI 的翻译器
  • golang常用库之-go-i18n库(国际化)
  • 26、跳表
  • SEO长尾词优化实战策略
  • 【大模型原理与技术-毛玉仁】第五章 模型编辑
  • leetcode刷题日记——二叉搜索树中第 K 小的元素
  • MIT 6.S081 Lab 11 networking
  • RD-Agent-Quant:一个以数据为中心的因素与模型联合优化的多智能体框架
  • CANoe trace里面显示的Time 具体是什么意思
  • Python抽象基类实战:构建广告轮播框架ADAM的核心逻辑
  • Python绘制三十六计
  • OGG 23ai for DAA 部署与补丁升级
  • 雪花ID问题诊断与解决方案
  • C++调试(肆):WinDBG分析Dump文件汇总
  • stm32内存踩踏一例
  • 高斯消元法及其扩展
  • 【2025年软考中级】第二章2.3 编译程序基本原理
  • 当数据包从上层移动到下层时,OSI 模型中会发生什么?
  • Go爬虫开发学习记录
  • 从内存角度透视现代C++关键特性
  • freeRTOS 互斥量优先级继承机制函数实现xQueueGenericReceive()
  • C++ 信息学奥赛总复习题答案解析(第一章)
  • 电脑商城--用户注册登录
  • 步进电机调试记录(先让我的步进电机转起来)
  • 【Java学习笔记】String类(重点)