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

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

相关文章:

  • Python_day47
  • 华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent
  • Python入门手册:异常处理
  • 微前端 - Native Federation使用完整示例
  • JavaWeb的一些基础技术
  • Jenkins持续集成CI,持续部署CD,Allure报告集成以及发送电子 邮件
  • 前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
  • EPPLUS——CAD c#读写EXCEL的第三方库
  • wpf ListBox 去除item 单击样式
  • Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志
  • 使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
  • 数据库(sqlite)基本操作
  • 【QT】输入类控件 详解
  • QT进阶之路:带命名空间的自定义控件在Qt设计器与qss中的使用技巧
  • 【C++ 真题】P1747 好奇怪的游戏
  • 基于 STM32 的四路 PWM 控制智能小车运动的模块化控制程序
  • 垃圾回收相关八股
  • Qt学习及使用_第1部分_认识Qt---学习目的及技术准备
  • 【Linux】SSH:免密登录
  • Cursor实现用excel数据填充word模版的方法
  • 怎样自己免费搭建网站/新东方教育培训机构
  • 苏州网站建设 公司/谷歌google官网下载
  • python官方网站/北京全网推广
  • 目前做系统比较好的网站/代做百度关键词排名
  • 烟台市最好的专业做网站的公司/win10最强性能优化设置
  • 手机网站有哪些类型/石家庄网络推广平台