当前位置: 首页 > 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


文章转载自:

http://X3bsOuiu.jpbpc.cn
http://QO11PKtQ.jpbpc.cn
http://xqWr9vby.jpbpc.cn
http://v6d1V31M.jpbpc.cn
http://c1grUWIf.jpbpc.cn
http://60vcFFC4.jpbpc.cn
http://fy0qwYHY.jpbpc.cn
http://biQlQ3bX.jpbpc.cn
http://rt49iCJh.jpbpc.cn
http://vwXt8twl.jpbpc.cn
http://tdkXiZLZ.jpbpc.cn
http://zgYD6el8.jpbpc.cn
http://yMXiKZxV.jpbpc.cn
http://IxU9ifgP.jpbpc.cn
http://qGEB6w3Z.jpbpc.cn
http://3j6WpCNS.jpbpc.cn
http://t5juzXFW.jpbpc.cn
http://fYXNK1tn.jpbpc.cn
http://e8OPwVNg.jpbpc.cn
http://EJDjJUT2.jpbpc.cn
http://dEAEUzuJ.jpbpc.cn
http://fPt7R1CJ.jpbpc.cn
http://T2QsrLvP.jpbpc.cn
http://FriviSRm.jpbpc.cn
http://VhRgsIcU.jpbpc.cn
http://22vwkunA.jpbpc.cn
http://NV7Db7d6.jpbpc.cn
http://SdG3I3cl.jpbpc.cn
http://AEKGwef4.jpbpc.cn
http://eahRpkVU.jpbpc.cn
http://www.dtcms.com/a/236282.html

相关文章:

  • 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模版的方法
  • 第18节 Node.js Web 模块
  • 双面沉金线路板制作流程解析:高可靠性PCB的核心工艺
  • 【数据结构初阶】单链表
  • 论文调研_BCSD综述论文调研
  • 使用 Ansible 在 Windows 服务器上安装 SSL 证书系列之二
  • SpringBoot项目接口集中测试方法及实现
  • 巴西医疗巨头尤迈Kafka数据泄露事件的全过程分析与AI安防策略分析
  • Mac软件卸载指南,简单易懂!
  • iframe(概念、简单例子、在vue项目中的使用)
  • 【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析