mybatis 批量插入和批量修改

在处理数据的时候,用mybatis 要进行批量插入,还要根据字段更新关联表的字段内容。记录下如何使用的。

批量插入:

写法:

mapper:

void insertBatchDispatch(@Param("dispatches") List<Dispatch> dispatches);

xml:

<sql id="DispatchColumn">
    DISPATCH_ID, SERVICE, CIRCUIT, ROUTE
</sql> 

<insert id="insertBatchDispatch" parameterType="java.util.List">
    insert into dispatch_service
    ( <include refid="DispatchColumn"></include> )
    values
    <foreach collection ="dispatches" item="item" separator =",">
        (#{item.dispatchId}, #{item.service},
        #{item.circuit}, #{item.route})
    </foreach >
</insert>

分批插入:

如何一次性插入很多,会执行报错。可以分批插入,插入个1000条

分批数据处理可以用skip和limit

参考:

public static void main(String args[]) {
    String data = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20";
    List<String> datas = Arrays.asList(data.split(","));
    System.out.println(datas.size() + " "+JSON.toJSONString(datas));
    int loopSize = 3;
    int dataSize = datas.size();
    // 向上取整
    int loop =  dataSize / loopSize + (dataSize % loopSize != 0 ? 1 : 0);

    System.out.println(loop);
    for (int i = 0; i < loop; i++) {
        List<String> skipData = ListUtils.emptyIfNull(datas).stream().skip(i * loopSize).limit(loopSize).collect(Collectors.toList());
        System.out.println(skipData);
    }
}

如何进行批量修改呢?

批量修改:

写法

mapper:

void updateBatchDetail(@Param("details") List<CircuitDetail> details);

xml:

<update id="updateBatchDetail"  parameterType="java.util.List">
    <foreach collection="details" item="item" index="index" open="" close="" separator=";">
        update circuit_detail
        set service = #{item.service,jdbcType=VARCHAR},
         circuit = #{item.circuit,jdbcType=VARCHAR},
        route =  #{item.route,jdbcType=VARCHAR}
        where dispatch_id = #{item.dispatchId}
    </foreach>
</update>

执行报错,怎么处理呢?

处理:

mybatis支持批量操作

开启批量执行sql的开关,在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,即allowMultiQueries=true,如下:

mysql

​​​​​​​jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/databaseName?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

sqlserver

datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=databaseName;allowMultiQueries=true

 总结:

        批量插入和批量修改,要注意控制数量,批量修改要记得开启批量执行的操作,在连接的url上添加allowMultiQueries=true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值