更新多条数据,每条数据都不一样
通常需要一次更新多条数据有两个方式
这两种方式各有利弊,程序中for循环实现就不说了,这里主要介绍第二种方式在fluent mybatis中的实现,以及和mybatis实现的对比。
这种方式在大批量更新时, 最大的问题就是效率,逐条更新,每次都会连接数据库,然后更新,再释放连接资源。
mybatis实现方式
通过mybatis提供的循环标签,一次构造多条update的sql,一次提交服务器进行执行。
定义Mapper
执行测试验证
使用FluentMybatis实现方式
使用fluent mybatis进行批量更新很简单,只需要在#updateBy方法中传入 IUpdate数组即可
上面的sql语句使用mysql的case when then语法实现的批量更新3条记录,并且根据id的值不同,设置不同的address值。
mybatis原生实现方式
如果使用mybatis的xml语法来实现,xml文件就需要表达为下面方式:
使用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)函数可以传入任意表更新.
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删