mybatis自定义动态sql批量保存(插入或更新)数据

最近遇到个需求,对现存的业务表做个数据导入接口,情况如下

1、表的数量比较多
2、根据不同表的业务,多个字段判断是否重复数据,如果重复就更新原来的数据,否则新增
**

本来使用Mybatis-Plus有saveOrUpdateBatch接口就可以简单实现,奈何公司没用plus。
考虑到表的数量多,选择用一个通用的mapper接口,接收不同的表名和数据来实现。

1、首先在表中,对需要参与判断业务唯一的字段建立联合索引,并且设置为唯一索引
2、设计mapper

<!-- 自定义批量保存数据-->
    <insert id="batchSaveDynamic" parameterType="java.util.Map">
        INSERT INTO
        <if test="tableName != null and tableName != ''">
            ${tableName}
        </if>
        (
        <foreach collection="records[0].keySet()" item="column" separator=",">
            ${column}
        </foreach>
        )
        VALUES
        <foreach collection="records" item="record" separator=",">
            (
            <foreach collection="record.values()" item="value" separator=",">
                #{value}
            </foreach>
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        <foreach collection="records[0].keySet()" item="column" separator=",">
            ${column} = VALUES(${column})
        </foreach>
    </insert>

mapper接口

/**
     * 自定义批量保存数据
     *
     * @param tableName  表名
     * @param records    数据集合
     * @return 保存数据数目
     **/
    int batchSaveDynamic(@Param("tableName")String tableName, @Param("records") List<Map<String,Object>> records);

其中List是需要保存的数据集合,Map中的key对应表字段,Object为对应的值,需要注意Map中的所有key,数据库表中必须存在。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值