Fluent Mybatis入门:批量更新技巧

批量更新同一张表的数据

更新多条数据,每条数据都不一样

  • 背景描述

通常需要一次更新多条数据有两个方式

  1. 在业务代码中循环遍历,逐条更新
  2. 一次性更新所有数据, 采用批量sql方式,一次执行。

这两种方式各有利弊,程序中for循环实现就不说了,这里主要介绍第二种方式在fluent mybatis中的实现,以及和mybatis实现的对比。

java中for循环实现方式

这种方式在大批量更新时, 最大的问题就是效率,逐条更新,每次都会连接数据库,然后更新,再释放连接资源。

一条SQL,服务端逐条更新

mybatis实现方式

通过mybatis提供的循环标签,一次构造多条update的sql,一次提交服务器进行执行。

定义Mapper

执行测试验证

使用FluentMybatis实现方式

使用fluent mybatis进行批量更新很简单,只需要在#updateBy方法中传入 IUpdate数组即可

使用mysql的Case When then方式更新

上面的sql语句使用mysql的case when then语法实现的批量更新3条记录,并且根据id的值不同,设置不同的address值。

mybatis原生实现方式

如果使用mybatis的xml语法来实现,xml文件就需要表达为下面方式:

  • xml文件
  • 定义Mapper
  • 验证

使用Fluent Mybatis实现方式

只需要在applyFunc中传入case when语句,和对应的参数(对应case when语句中的预编译占位符'?')

如果业务入口传入的是Entity List或者Map List,可以使用java8的stream功能处理成数组,示例如下:

使用Fluent Mybatis无需额外编写xml文件和mapper(使用框架生成的Mapper文件就够了)。在业务逻辑上不至于因为有额外的xml文件,而产生割裂感。

批量更新不同的表数据

上面的例子使用mybatis和fluent mybatis演示的如果通过不同方法批量更新同一张表的数据,在fluent mybatis的更新其实不限定于同一张表, 在#updateBy(IUpdate... updates)函数可以传入任意表更新.

示例更新了2张表: student 和 home_address

*** 感谢网友 伦子伦子 提供的建议 ***

【小应用】尚学堂-javaEEjava服务器端小应用-Java应用servlet-2021年最新版服务器应用-Java小白必看视频,通俗易懂的java服务器应用

2021年最新版SpringMVC视频教程_3天学会SpringMVC框架精品全套教程_SpringMVC框架注解方式搭建环境_SpringMVC框架配置原理

【分享源码】尚学堂2021年最新免费spring框架3天学会SpringMVC框架特选教程_JavaEE进阶必备框架讲解_Spring框架入门到实战_小白必看

【java开发项目】尚学堂java项目开发数字货币项目-超级详细新手小白必看-基于Java开发的货币交易项目_基于SpringCloudAlibaba微服务开发

【java项目练习】java-尚学堂高淇老师讲解java项目开发-打飞机游戏作为项目-java学习入门级练手项目新手小白必看视频-超级详细超级简单易懂的项目

作者:稻草江南 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空