• 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

  • 相关阅读:
    ​Chrome插件:Postman Interceptor 调试的终极利器
    Java面试大揭秘 从技术面被“虐”到征服CTO,全凭这份强到离谱的pdf
    带你全方位了解光谱共焦位移传感器
    Day35PHP数组
    Linux系统conda虚拟环境离线迁移移植
    【前端】Vue+Element UI案例:通用后台管理系统-面包屑、tag栏
    高级 ECharts 技巧:自定义图表主题与样式
    Python两个序列的相关性
    微信订货商城:12亿流量红利与企业转型升级
    Java中如何清空一个HashSet对象呢?
  • 原文地址:https://blog.csdn.net/qq_35461948/article/details/126619797