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 pdf打印及预览(openhtmltopdf+freemarker)

    SpringBoot pdf打印及预览(openhtmltopdf+freemarker)

    这篇文章主要介绍了SpringBoot pdf打印及预览(openhtmltopdf+freemarker)
    2023-05-05
  • Java注释代码执行方法解析

    Java注释代码执行方法解析

    这篇文章主要介绍了Java注释代码执行方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java通过工厂、Map容器创建对象的方法

    Java通过工厂、Map容器创建对象的方法

    这篇文章主要介绍了Java通过工厂、Map容器创建对象的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java固定大小队列的几种实现方式详解

    java固定大小队列的几种实现方式详解

    队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,这篇文章主要给大家介绍了关于java固定大小队列的几种实现方式,需要的朋友可以参考下
    2021-07-07
  • springmvc接收json串,转换为实体类List方法

    springmvc接收json串,转换为实体类List方法

    今天小编就为大家分享一篇springmvc接收json串,转换为实体类List方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验 使用消息资源文件对消息国际化

    Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验

    这篇文章主要介绍了Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验 使用消息资源文件对消息国际化的相关知识,需要的朋友可以参考下
    2017-12-12
  • Java快速排序案例讲解

    Java快速排序案例讲解

    这篇文章主要介绍了Java快速排序案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Idea 2020.2安装MyBatis Log Plugin 不可用的解决方法

    Idea 2020.2安装MyBatis Log Plugin 不可用的解决方法

    小编在使用时发现Idea 2020.2 MyBatis Log Plugin 收费了,这个可以替代用,小编特此把解决方案分享到脚本之家平台供大家参考,感兴趣的朋友一起看看吧
    2020-11-11
  • Spring Web零xml配置原理以及父子容器关系详解

    Spring Web零xml配置原理以及父子容器关系详解

    这篇文章主要介绍了Spring Web零xml配置原理以及父子容器关系详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 简单了解JAVA构造方法

    简单了解JAVA构造方法

    构造方法作用就是对类进行初始化。 如果你没有定议任何构造方法的形式,程式会为你取一个不带任何参数的构造函数,那么你产生类的对像时只能用不带参数的方法.下面小编和大家来一起学习一下吧
    2019-06-06

最新评论