mybatis oracle 动态sql批量插入

本文介绍了一种使用MyBatis进行批量插入操作的方法,通过mapper.xml文件定义的SQL语句,结合Java代码实现对大量数据的高效批量插入,避免了因SQL长度过长而引发的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  •  mapper.xml 语法 

 

<insert id="insertxxx"  parameterType="java.util.List" useGeneratedKeys="false" >
    INSERT ALL
    <foreach collection="list" item="log" >
         into table_name
        <trim prefix="(" suffix=")" suffixOverrides=",">
            F_LOG_ID,
            F_OPER_RESOURCENUM,
            F_IS_USE,
            <if test="log.createManCode != null">
                F_CREATE_MANCODE,
            </if>
            <if test="log.createManName != null">
                F_CREATE_MANNAME,
            </if>
            <if test="log.targetNum != null">
                F_OPER_OBJECTID,
            </if>
            F_CREATE_TIME
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            sys_guid(),
            '807',
            1,
            <if test="log.createManCode != null">
                #{log.createManCode},
            </if>
            <if test="log.createManName != null">
                #{log.createManName},
            </if>
            <if test="log.targetNum != null">
                #{log.targetNum},
            </if>
            TO_CHAR(sysdate,'YYYYMMDDHH24MISS')
        </trim>

    </foreach>
    select 1 from dual
</insert>
  •  java代码
      //使用批量插入
        List<OpLogReq> opLogTempList = new ArrayList<>();
        for (int i = 0; i < resultList.size();) {

            OpLogReq opLogReq = new OpLogReq();
            opLogReq.setCreateManCode(loginName);
            opLogReq.setCreateManName(cnName);
            opLogReq.setTargetNum(resultList.get(i).getfTargetNum());
            opLogTempList.add(opLogReq);

            i++;
            if (i % MAX_COUNT== 0 || i == resultList.size()) {
                //批量插入日志
                searchInfoSyncMapper.insertOpLogBatch(opLogTempList);
                opLogTempList.clear();
            }

        }

设置MAX_COUNT 防止sql过长导致报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值