• 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

  • 相关阅读:
    【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?
    Linux 常用压缩格式
    pytorch的使用:使用神经网络进行气温预测
    【人工智能深度报告--机器人系列技术篇】
    引擎入门 | Unity UI简介–第1部分(9)
    Java 编程问题:三、使用日期和时间
    2021年9月电子学会图形化三级编程题解析含答案:计算平均分
    使用 Sealos 一键私有化部署 Serverless 框架 Laf
    python从小白到大师-第一章Python应用(七)应用领域与常见包-自动化办公PPT
    【788. 旋转数字】
  • 原文地址:https://blog.csdn.net/qq_35461948/article/details/126619797