• mybatis 批量插入和批量修改


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

    批量插入:

    写法:

    mapper:

    void insertBatchDispatch(@Param("dispatches") List dispatches);

    xml:

    1. <sql id="DispatchColumn">
    2.     DISPATCH_ID, SERVICE, CIRCUIT, ROUTE
    3. sql>
    4. <insert id="insertBatchDispatch" parameterType="java.util.List">
    5.     insert into dispatch_service
    6.     ( <include refid="DispatchColumn">include> )
    7.     values
    8.     <foreach collection ="dispatches" item="item" separator =",">
    9.         (#{item.dispatchId}, #{item.service},
    10.         #{item.circuit}, #{item.route})
    11.    
    12. insert>

    分批插入:

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

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

    参考:

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

    如何进行批量修改呢?

    批量修改:

    写法

    mapper:

    void updateBatchDetail(@Param("details") List details);

    xml:

    1. <update id="updateBatchDetail"  parameterType="java.util.List">
    2.     <foreach collection="details" item="item" index="index" open="" close="" separator=";">
    3.         update circuit_detail
    4.         set service = #{item.service,jdbcType=VARCHAR},
    5.          circuit = #{item.circuit,jdbcType=VARCHAR},
    6.         route =  #{item.route,jdbcType=VARCHAR}
    7.         where dispatch_id = #{item.dispatchId}
    8.     foreach>
    9. 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

  • 相关阅读:
    @Accessors 注解详解
    今年是嵌入式香还是互联网香?
    前端开发避免重排和重绘
    发现广告的是什么?
    年龄渐长,技术人的发展之路该怎么走?
    Redis的高可用实现方案:哨兵与集群
    P4027 [NOI2007] 货币兑换
    抖音快速涨粉的方法,快速涨粉软件的实操分享与心得分享
    m1系列芯片aarch64架构使用docker-compose安装seata
    浅析数据采集工具Flume
  • 原文地址:https://blog.csdn.net/qq_35461948/article/details/126619797