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

当mybatisPlus与tk.mybatis遇到更新

前言

      今天其实也没啥好说的,最近都是在赶工期CRUD,没有时间也没有场景做技术提升。今天主要是来说下Mybatis的ORM框架在做数据更新时的对比。mybatisPlus与tk.mybatis的更新操作就通过场景比较吧。


一、更新场景

      字段有值,现在想更新为null。

二、两个更新操作的对比

1.mybatisPlus的更新

int updateById(@Param("et") T entity);

这个没什么好解释的吧,就是实体对象又id,然后其他字段有值,做更新。

int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
dangerousInfo.setModifyTime(DateUtil.date());
//this.baseMapper.updateById(dangerousInfo);
UpdateWrapper<DangerousInfo> updateWrapper = new UpdateWrapper();
updateWrapper.eq("id",id);
//updateWrapper.eq("delete_state",dangerousInfo.getDeleteState());
updateWrapper.set("plan_start_time",planStartTime);
updateWrapper.set("plan_end_time",planEndTime);
updateWrapper.set("actual_start_time",dangerousInfo.getActualStartTime());
updateWrapper.set("actual_end_time",dangerousInfo.getActualEndTime());
this.baseMapper.update(dangerousInfo,updateWrapper);

      这里原先用的就是updateById方法,但是实际上能,几个时间如果要更新为null,用updateById就无法实现,所以改成下面的方式。
      实际上UpdateWrapper对象很特殊,可以设置条件,也可以设置set内容。


2.tk.mybatis

@UpdateProvider(type = BaseUpdateProvider.class, method = “dynamicSQL”)
int updateByPrimaryKeySelective(T record);
      这种方式更新不会更新入参为空的字段。

@UpdateProvider(type = BaseUpdateProvider.class, method = “dynamicSQL”)
int updateByPrimaryKey(T record);
      这种方式更新,为空的字段也会更新,也就是sql会出现 xxx = null。


总结

  • mybatisPlus如果要更新null,用updateById也是可以实现的,就是在相应字段上加上
    @TableField(updateStrategy = FieldStrategy.IGNORED)注解,或者全局设置。
    ignored:“忽略判断”,所有字段都更新和插入。
    not_null:“非 null 判断”,只更新和插入非null值。
    not_empty:“非空判断”, 只更新和插入非null值且非空字符串。
    default: 默认的,一般只用于注解里。
    这种不管是全局配置、还是字段注解都不是我所喜欢的。似乎这一切在框架搭建开始就定死了,要么选择全字段传参,要么实体加注解。但是这些后期都不能随意改动了,你懂的。

  • tk.mybatis的更新方式其实还有很多,比如:
    @UpdateProvider(type = ConditionProvider.class, method = “dynamicSQL”)
    int updateByCondition(@Param(“record”) T record, @Param(“example”) Object condition);
    @UpdateProvider(type = ConditionProvider.class, method = “dynamicSQL”)
    int updateByConditionSelective(@Param(“record”) T record, @Param(“example”) Object condition);
    等等。

  • tk.mybatis的更新就跟配置解耦,完全看使用的更新方式。也就是看业务需要,同时在更新时还可以设置忽略字段。这种细粒度的我更喜欢,后面来人编码也不会受到影响。
    针对更新这点,决定用mybatisPlus还是tk.mybatis,那就看各位了。这都是比较好的两个ORM框架,我也没资格说哪个更好。UPing

相关文章:

  • sp.coo_matrix(), sp.eye()
  • linux虚拟机未建分区的情况下对磁盘进行扩容
  • 猿创征文|【数据结构】牛客网刷题
  • 【函数式编程】Java函数式编程学习
  • 基于springboot,vue旅游信息推荐系统
  • SSLError(MaxRetryError(‘HTTPSConnectionPool(host=\‘repo.anaconda.com\‘, port
  • vs生成dll且被java通过jna调用
  • DDD - 六边形架构和CQRS架构
  • 宠物寄养小程序实战教程02
  • 【计算机网络】运输层习题(谢希仁)(1)
  • 微信小程序抓包-夜神模拟器结合BurpSuite抓包(可用于现在最新版本微信)
  • SAR/毫米波雷达 论文阅读 | Freehand, Agile, and High-Resolution Imaging, IEEE Access 2019
  • 神经网络一词在英文中是,网络词神经质什么意思
  • KOOM原理讲解(上)-JAVA内存分析
  • create-vite‘ 不是内部或外部命令,也不是可运行的程序
  • [译] React v16.8: 含有Hooks的版本
  •  D - 粉碎叛乱F - 其他起义
  • express如何解决request entity too large问题
  • gitlab-ci配置详解(一)
  • Java程序员幽默爆笑锦集
  • opencv python Meanshift 和 Camshift
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • swift基础之_对象 实例方法 对象方法。
  • 编写符合Python风格的对象
  • 后端_ThinkPHP5
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聚类分析——Kmeans
  • 探索 JS 中的模块化
  • 再谈express与koa的对比
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ###项目技术发展史
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (八)Spring源码解析:Spring MVC
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)为C# Windows服务添加安装程序
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core控制台应用程序初识
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net项目IIS、VS 附加进程调试
  • .net中调用windows performance记录性能信息
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @angular/cli项目构建--Dynamic.Form
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504