mybatis实现批量更新全过程

 更新时间:2025年11月10日 08:51:33   作者:大大怪~将军  
Mybatis实现批量更新的三种方式:foreach标签、casewhen语句和choose语句,foreach标签适用于大量数据更新,casewhen语句适用于一次性批量更新较少记录,BatchExecutor批处理器适用于需要在一次数据库会话中批量执行多个SQL语句,但可能不支持所有数据库

mybatis实现批量更新

注:Mybatis实现批量更新有三种方式,分别是使用foreach标签、使用SQL的case when语句和使用动态SQL的choose语句。

具体实现方法如下:

1:使用foreach标签

   <update id="pubAndTakes">
        <foreach collection="idList" item="item" separator=";" open="begin" close=";end;">
            UPDATE LY_SJS_WDZM_YXLXD_PZRY SET ZT = '1' , CJSJ = TO_CHAR(SYSDATE,'yyyy-MM-dd hh:mm:ss')
            ,BBH = #{item.bbh}
            WHERE ZT = #{item.zt} AND ID = #{item.id}
        </foreach>
    </update>

2:使用SQL的case when语句

<update id="updateBatch" parameterType="java.util.List">
    UPDATE your_table
    SET your_column1 = 
        <foreach collection="list" item="item" separator=",">
            WHEN your_id = #{item.id} THEN #{item.column1}
        </foreach>
    WHERE your_id IN
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item.id}
        </foreach>
</update>

3:使用 Case 语句

在 SQL 更新语句中使用 CASE 语句,根据条件进行更新。这种方式可以避免使用 foreachBatchExecutor,但对于大量数据可能性能较差。

<update id="updateBatch" parameterType="java.util.List">
    UPDATE your_table
    SET your_column1 = 
        CASE
            <foreach collection="list" item="item" separator=" ">
                WHEN your_id = #{item.id} THEN #{item.column1}
            </foreach>
        END,
    your_column2 =
        CASE
            <foreach collection="list" item="item" separator=" ">
                WHEN your_id = #{item.id} THEN #{item.column2}
            </foreach>
        END
    WHERE your_id IN
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item.id}
        </foreach>
</update>

这种方式的 SQL 语句会根据条件进行更新,适用于一次性批量更新较少的记录。

注:

使用BatchExecutor批处理器

MyBatis 提供了 BatchExecutor 批处理器,可以在一次数据库会话中批量执行多个 SQL 语句。这种方式需要在代码中手动创建批处理器,并调用 batch 方法执行批量更新。

注意,此方式可能不支持所有数据库,因此请仔细查阅文档以确认你的数据库是否支持。

SqlSession sqlSession = sqlSessionFactory
                           .openSession(ExecutorType.BATCH, false);

YourMapper mapper = sqlSession.getMapper(YourMapper.class);
try {
    for (YourEntity entity : entities) {
        mapper.update(entity);
    }
    sqlSession.commit();
} finally {
    sqlSession.close();
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现注册登录与邮箱发送账号验证激活功能

    Java实现注册登录与邮箱发送账号验证激活功能

    这篇文章主要介绍了Java实现注册登录与邮箱发送账号验证激活功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java实现获取前、后N天日期的函数分享

    Java实现获取前、后N天日期的函数分享

    本文给大家分享的是使用java实现的获取当前日期前后N天的函数,非常的简单实用,有需要的小伙伴可以参考下。
    2015-03-03
  • Spring Boot加密配置文件特殊内容的示例代码详解

    Spring Boot加密配置文件特殊内容的示例代码详解

    这篇文章主要介绍了Spring Boot加密配置文件特殊内容的相关知识,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Java中for、foreach、stream区别和性能比较详解

    Java中for、foreach、stream区别和性能比较详解

    for、foreach、stream都可以循环处理数据,如果单纯当循环使用,for、foreach、stream哪个性能更好,这篇文章主要给大家介绍了关于Java中for、foreach、stream区别和性能的相关资料,需要的朋友可以参考下
    2024-03-03
  • Java方法参数装配顺序详解

    Java方法参数装配顺序详解

    这篇文章主要介绍了Java方法参数装配顺序详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java jvm两种存储区的类型知识点讲解

    java jvm两种存储区的类型知识点讲解

    在本篇文章里小编给大家整理的是一篇关于java jvm两种存储区的类型知识点讲解内容,有兴趣的朋友们可以学习下。
    2021-03-03
  • JAVA JDK8 List分组的实现和用法

    JAVA JDK8 List分组的实现和用法

    今天小编就为大家分享一篇关于JAVA JDK8 List分组的实现和用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • mybatis动态sql之新增与更新方式

    mybatis动态sql之新增与更新方式

    这篇文章主要介绍了mybatis动态sql之新增与更新方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringData JPA 如何搭建 xml的配置方式

    SpringData JPA 如何搭建 xml的配置方式

    这篇文章主要介绍了SpringData JPA 如何搭建 xml的配置方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • spring-boot List转Page的方法步骤

    spring-boot List转Page的方法步骤

    这篇文章主要介绍了spring-boot List转Page的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论