在MyBatis中利用ON DUPLICATE KEY UPDATE进行批量插入或更新操作

前言

MySQL的INSERT INTO ... ON DUPLICATE KEY UPDATE语句不仅适用于单行数据的操作,也可以用于处理批量插入并根据唯一键更新已有记录的情况。结合MyBatis框架,可以高效地实现这一功能。

一、MyBatis中的批量插入与更新示例

假设我们有一个包含部门信息的实体类SysDept,其属性包括deptId(主键),parentIdancestorsdeptNameorderNumstatusdelFlagcreateTimeupdateTime。现在需要在一个映射文件中定义一个名为replaceInto的方法来批量插入或更新这些部门信息:

<insert id="replaceInto">
    INSERT INTO sys_dept(
        dept_id,
        parent_id,
        ancestors,
        dept_name,
        order_num,
        status,
        del_flag,
        create_time,
        update_time) 
    VALUES
    <foreach collection="deptList" item="item" separator=",">
        (#{item.deptId},
        #{item.parentId},
        #{item.ancestors},
        #{item.deptName},
        #{item.orderNum},
        #{item.status},
        #{item.delFlag},
        #{item.createTime},
        #{item.updateTime})
    </foreach>
    ON DUPLICATE KEY UPDATE
        parent_id=VALUES(parent_id),
        ancestors=VALUES(ancestors),
        dept_name=VALUES(dept_name),
        order_num=VALUES(order_num),
        status=VALUES(status),
        del_flag=VALUES(del_flag),
        create_time=VALUES(create_time),
        update_time=VALUES(update_time);
</insert>

在这个例子中:

  • deptList是传入Mapper方法的参数,它是一个包含了多个SysDept对象的列表。
  • <foreach>标签用于遍历deptList,将每个对象的属性值插入到SQL语句中。
  • 当存在重复的dept_id(主键)时,ON DUPLICATE KEY UPDATE子句会自动更新相应的列值。

二、调用示例

List<SysDept> deptList = new ArrayList<>();
// 假设已经填充了deptList数据...

sysDeptMapper.replaceInto(deptList);

通过这种方式,无论传入的部门列表中有多少条记录,无论是新记录还是已存在的记录,都能确保数据的一致性和完整性,并且有效地执行了一次性插入或更新所有部门信息的操作。

总结来说,在处理大量数据的批量插入与更新场景下,MySQL的ON DUPLICATE KEY UPDATE配合MyBatis的动态SQL,能够简化编程逻辑,提高数据处理效率。同时,这个示例也展示了如何在实体类驼峰命名法与数据库表字段下划线命名法之间灵活转换。在实际应用时,请确保对数据库表结构和实体类属性保持一致的命名约定。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值