mybatis中批量更新多个字段的2种实现方法

 更新时间:2023年09月01日 09:54:17   作者:清水  
当我们使用mybatis的时候,可能经常会碰到一批数据的批量更新问题,因为如果一条数据一更新,那每一条数据就需要涉及到一次数据库的操作,本文主要介绍了mybatis中批量更新多个字段的2种实现方法,感兴趣的可以了解一下

在mybatis中批量更新多个字段

推荐使用如下操作:

方式1:在Dao层接口中:

void updateBatch(@Param("list")List<Student> list);

在对应的mapper文件中如下:

<update id="updateBatch" parameType="java.lang.List">
  update student 
    <trim prefix="set" suffixOverrides=",">
       <trim prefix=" age = case " suffix="end,">
          <foreach collection="list" item="stu" index="index">
            <if test=" item.age != null and item.id != null">
              when id = #{item.id} then #{item.age}
            </if>
            <if test=" item.age == null and item.id != null">
              when id = #{item.id} then mydata_table.age   //原始值
            </if>
          </foreach>
       </trim>
       <trim prefix=" name = case" suffix="end,">
          <foreach collection="list" item="stu" index="index">
            <if test=" item.name!= null and item.id != null">
              when id = #{item.id} then #{item.name}
            </if>
            <if test=" item.name == null and item.id != null">
              when id = #{item.id} then mydata_table.name   //原始值
            </if>
          </foreach>
       </trim>
    </trim>
</update>

上面的sql语句打印出来,应该是这个样子的:

update student  
 set  age = case
      when id = #{item.id} then #{item.status}//此处应该是<foreach>展开值  
       when id = #{item.id} then #{item.status}
      .... 
    end,
    name = case
      when id = #{item.id} then #{item.status}
      ...
    end
 where id in (?,?,?,?...);

<trim>属性说明 

1.prefix,suffix 表示在trim标签包裹的部分的前面或者后面添加内容 
2.如果同时有prefixOverrides,suffixOverrides 表示会用prefix,suffix覆盖Overrides中的内容。 
3.如果只有prefixOverrides,suffixOverrides 表示删除开头的或结尾的xxxOverides指定的内容 

方式2:在Dao层接口方法定义同上

mapper文件如下:

<update id="updateBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update student
        <set>
            name=#{item.name},
       age = #{item.age}
        </set>
        where id = #{item.id}
    </foreach>      
</update>

到此这篇关于mybatis中批量更新多个字段的2种实现方法的文章就介绍到这了,更多相关mybatis 批量更新多个字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Lambda表达式与匿名内部类的联系和区别实例分析

    Java Lambda表达式与匿名内部类的联系和区别实例分析

    这篇文章主要介绍了Java Lambda表达式与匿名内部类的联系和区别,结合实例形式分析了Java Lambda表达式与匿名内部类功能、用法、区别及操作注意事项,需要的朋友可以参考下
    2019-10-10
  • 三种Spring BeanName生成器,你了解吗

    三种Spring BeanName生成器,你了解吗

    无论我们是通过 XML 文件,还是 Java 代码,亦或是包扫描的方式去注册 Bean,都可以不设置BeanName,而Spring均会为之提供默认的 beanName,本文我们就来看看 Spring 中三种处理不同情况的 beanName生成器吧
    2023-09-09
  • Idea2024创建Maven项目没有src文件夹的解决步骤

    Idea2024创建Maven项目没有src文件夹的解决步骤

    本文主要介绍了Idea2024创建Maven项目没有src文件夹,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

    JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

    文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥、加密敏感数据、自定义加密配置以及加密与解密的示例,通过这些步骤,开发者可以轻松地保护应用程序中的敏感信息,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Java中的线程池如何实现线程复用

    Java中的线程池如何实现线程复用

    这篇文章主要介绍了Java中的线程池如何实现线程复用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 自制Java工具实现翻译鼠标选中文本

    自制Java工具实现翻译鼠标选中文本

    这篇文章主要为大家详细介绍了如何自制Java工具实现ctrl+c+c翻译鼠标选中文本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2024-01-01
  • 简单了解Java方法的定义和使用实现详解

    简单了解Java方法的定义和使用实现详解

    这篇文章主要介绍了简单了解Java方法的定义和使用实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java中使用zxing批量生成二维码立牌

    java中使用zxing批量生成二维码立牌

    本篇文章主要介绍了java中使用zxing批量生成二维码立牌,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12
  • 在Spring Boot中如何使用log4j记录日志

    在Spring Boot中如何使用log4j记录日志

    这篇文章主要介绍如何在spring boot中引入log4j,以及一些基础用法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 详解PowerDesigner之CDM、PDM、SQL之间转换

    详解PowerDesigner之CDM、PDM、SQL之间转换

    这篇文章主要介绍了详解PowerDesigner之CDM、PDM、SQL之间转换的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10

最新评论