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 批量更新多个字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot实现api加密的示例代码

    SpringBoot实现api加密的示例代码

    在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。本文主要介绍了SpringBoot实现api加密的示例代码,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Springboot之自定义全局异常处理的实现

    Springboot之自定义全局异常处理的实现

    这篇文章主要介绍了Springboot之自定义全局异常处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Jmeter 中 CSV 如何参数化测试数据并实现自动断言示例详解

    Jmeter 中 CSV 如何参数化测试数据并实现自动断言示例详解

    这篇文章主要介绍了Jmeter 中 CSV 如何参数化测试数据并实现自动断言,本文通过示例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot整合Docker实现一次构建到处运行的操作方法

    SpringBoot整合Docker实现一次构建到处运行的操作方法

    本文讲解的是 SpringBoot 引入容器化技术 Docker 实现一次构建到处运行,包括镜像构建、Docker仓库搭建使用、Docker仓库可视化UI等内容,需要的朋友可以参考下
    2022-10-10
  • Spring Boot实现热部署的五种方式

    Spring Boot实现热部署的五种方式

    这篇文章主要介绍了Spring Boot 五种热部署方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 详解JAVA动态代理

    详解JAVA动态代理

    这篇文章主要介绍了JAVA动态代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Spring Cloud Alibaba Nacos 入门详解

    Spring Cloud Alibaba Nacos 入门详解

    这篇文章主要介绍了Spring Cloud Alibaba Nacos入门详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Maven版本冲突的三种解决方法

    Maven版本冲突的三种解决方法

    在Maven项目中,依赖传递可能导致Jar包版本冲突,常见的解决策略包括依赖排除、版本锁定和使用maven-shade-plugin插件,本文就来介绍一下这三种解决方法,感兴趣的可以了解一下
    2024-10-10
  • 使用restTemplate.postForEntity()的问题

    使用restTemplate.postForEntity()的问题

    这篇文章主要介绍了使用restTemplate.postForEntity()的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java新增关联的三张表,每张表要求都插入集合,代码实现方式

    java新增关联的三张表,每张表要求都插入集合,代码实现方式

    这篇文章主要介绍了java新增关联的三张表,每张表要求都插入集合,代码实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论