Mybatis批量修改联合主键数据的两种方法

最近遇上需要批量修改有联合主键的表数据,网上找了很多文章,最终都没找到比较合适的方法,有些只能支持少量数据批量修改,超过十几条就不行了。

最终自己摸索总结了两种方式可以批量修改数据。

第一种:

 <update id="updateMoreEmpOrg" parameterType="java.util.List">
        update hr_emp_org
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="ISMAN = CASE EMPID" suffix="end,">
                <foreach collection="empOrgList" item="item" index="index">
                    <if test="item.isman != null">
                        when EMPID = #{item.empid} then #{item.isman}
                    </if>
                </foreach>
            </trim>
            <trim prefix="UPDATETIME = CASE EMPID" suffix="end,">
                <foreach collection="empOrgList" item="item" index="index">
                    <if test="item.updatetime != null">
                        when EMPID = #{item.empid} then #{item.updatetime}
                    </if>
                </foreach>
            </trim>

            <trim prefix="hr_status =case EMPID" suffix="end,">
                <foreach collection="empOrgList" item="item" index="index">
                    <if test="item.hrStatus != null">
                        when #{item.EMPID} then #{item.hrStatus}
                    </if>
                </foreach>
            </trim>
        </trim>
        where
        EMPID in
        <foreach collection="empOrgList" item="item" open="(" separator="," close=")">
            #{item.empid}
        </foreach>
        and ORGID in
        <foreach collection="empOrgList" item="item" open="(" separator="," close=")">
            #{item.orgid}
        </foreach>
    </update>

直接结果集来两个in查询,最终可以满足。

第二种:

 <update id="updateMoreEmpPosition" parameterType="java.util.List">
        update hr_emp_position
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="ISMAN =case" suffix="end,">
                <foreach collection="empPositionList" item="item" index="index">
                    <if test="item.isman != null">
                        when EMPID = #{item.empid} and POSITIONID = #{item.positionid} then #{item.isman}
                    </if>
                </foreach>
            </trim>
            <trim prefix="CREATETIME =case" suffix="end,">
                <foreach collection="empPositionList" item="item" index="index">
                    <if test="item.createtime != null">
                        when EMPID = #{item.empid} and POSITIONID = #{item.positionid} then #{item.createtime}
                    </if>
                </foreach>
            </trim>
            <trim prefix="UPDATETIME =case" suffix="end,">
                <foreach collection="empPositionList" item="item" index="index">
                    <if test="item.updatetime != null">
                        when EMPID = #{item.empid} and POSITIONID = #{item.positionid} then #{item.updatetime}
                    </if>
                </foreach>
            </trim>
            <trim prefix="hr_status =case" suffix="end,">
                <foreach collection="empPositionList" item="item" index="index">
                    <if test="item.hrStatus != null">
                        when EMPID = #{item.empid} and POSITIONID = #{item.positionid} then #{item.hrStatus}
                    </if>
                </foreach>
            </trim>
        </trim>
        where
        EMPID in
        <foreach collection="empPositionList" item="item" open="(" separator="," close=")">
            #{item.empid}
        </foreach>
    </update>

修改条件中trim里面 case后面不填对比字段,在if里面进行对比判断。

到此这篇关于Mybatis批量修改联合主键数据的两种方法的文章就介绍到这了,更多相关Mybatis批量修改数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis批量插入/修改/删除MySql数据

    前言 由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,应该要比循环插入的效果更好,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来.供以后查阅和学习. java代码: 注意:这里循环的时候需new 出来新的对象,而不能通过循环改变属性的值就认为这是一个新的对象了,通俗的说就是new ReddemCode()要放在for循环的

  • mybatis如何批量修改数据

    目录 批量修改主要有两种方式 第一种 第二种 mysql及mybatis批量更新数据update mysql批量更新update mybatis实现批量更新update 批量修改主要有两种方式 第一种 可以通过for循环一条一条修改数据,这样会影响效率,因此我不推荐,所以在这里我也不多说. 第二种 通过修改mybatis中mapper.xml文件,如下: <update id="updateRoleMenus" parameterType="java.util.List

  • mybatis实现批量修改-xml方式

    目录 mybatis批量修改-xml mybatis xml批量更新值 mybatis批量修改-xml mybatis批量查询,批量新增就不聊了,今天看看批量修改. 直接上代码吧 xml文件中代码如下: <update id="batchUpdate" parameterType="java.util.List"> update pat_doc_pat_info set sex= <foreach collection="list&quo

  • Java Mybatis批量修改封装详解

    重点重点重点,不然会报错 连接数据库url后面加个参数 allowMultiQueries=true 用习惯了 insertList 怎么能没有 updateList呢 就两个类 直接上代码 package com.lancabbage.gorgeous.utils.mybatis; import org.apache.ibatis.mapping.MappedStatement; import tk.mybatis.mapper.entity.EntityColumn; import tk.m

  • Mybatis批量修改联合主键数据的两种方法

    最近遇上需要批量修改有联合主键的表数据,网上找了很多文章,最终都没找到比较合适的方法,有些只能支持少量数据批量修改,超过十几条就不行了. 最终自己摸索总结了两种方式可以批量修改数据. 第一种: <update id="updateMoreEmpOrg" parameterType="java.util.List"> update hr_emp_org <trim prefix="set" suffixOverrides=&quo

  • 详解MyBatis中主键回填的两种实现方式

    主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大家分享下数据库主键回填在 MyBatis 中的两种实现思路. 原生写法 框架来源于我们学过的基础知识,主键回填实际上是一个在 JDBC 中就被支持的写法,有的小伙伴可能不知道这一点,因此这里我先来说说在 JDBC 中如何实现主键回填. JDBC 中实现主键回填其实非常容易,主要是在构造 Prepar

  • PHP实现更新中间关联表数据的两种方法

    本文以示例形式展示了PHP实现更新中间关联表数据的两种方法.分享给大家供大家参考之用.具体方法如下: 首先,中间关联表:这里的中间表只存表1的主键和表2的主键,即多对多的形式. 执行数据添加和删除为框架内部方法,不属于思路部分. 方法一:先全部删除旧数据,后添加新数据 $res = $this->classes->classEdit($id, $data); //修改主表数据 if($res) { //先删除关联表数据 $bool = $this->lesson_classes->

  • c#读取excel数据的两种方法实现

    方法一:OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改. 优点:读取方式简单.读取速度快 缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时.会非常占用内存,当内存不够时会抛出内存溢出的异常. 不过一般情况下还是非常不错的. (代码比原文相较有所修改) DataTable GetDataFromExcelByConn(bool hasTitle = false)

  • python批量生成身份证号到Excel的两种方法实例

    身份证号码的编排规则 前1.2位数字表示:所在省份的代码: 第3.4位数字表示:所在城市的代码: 第5.6位数字表示:所在区县的代码: 第7~14位数字表示:出生年.月.日: 第15.16位数字表示:所在地的派出所的代码: 第17位数字表示性别:奇数表示男性,偶数表示女性: 第18位数字是校检码,计算方法如下: (1)将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2. (2)将这17位数字和系数相

  • python向json中追加数据的两种方法总结

    目录 前言 1. list dump (不推荐) 2. json update (推荐使用) 总结 前言 json以其轻量级的数据交换格式,且易于阅读和编写而使用率很广泛,而使用json的过程中时而需要增加字段,本人验证两种方式之后将其集成梳理. 具体操作详情如下: 1. list dump (不推荐) 采用list方式,向json中添加字段.此法存在一定的问题,不推荐使用. 方法如下: (1)先创建一个列表: json_content = [] (2)将当前json文件中已有的内容读入列表中:

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

  • 使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法

  • Android 实现按两次返回键退出程序(两种方法)

    Android 实现按两次返回键退出程序(两种方法) 第一种方法: // 是否退出程序 private static Boolean isExit = false; // 定时触发器 private static Timer tExit = null; 第二种方法: public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isExit == false) {

  • Flask中获取小程序Request数据的两种方法

    Flask中获取小程序Request数据的两种方法 作为后端屌对于前端确实讳莫如深,JS中的类型Object竟然不能直接通过POST传入到后台Flask中,您会发现获取的是[object Object],这货在Flask中只是个Str,哈哈... 于是,开始寻求解决方案: 方案一,通过GET或者POST传参,将Object转换为Str请求数据: 1.在util.js中定义一个JS函数: function json2Form(json) { var str = []; for (var p in

随机推荐