• 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

  • 相关阅读:
    apriori算法python实现
    什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?
    【MQ基本概念 MQ的工作原理】
    自学SLAM(6)相机与图像实践:OpenCV处理图像与图像拼接(点云)
    七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
    如何运用API接口获取淘宝1688京东商品数据:从入门到实践
    【工具免费】喜马拉雅 x2m转m4a,xm转mp3的简单方法!
    华为云云耀云服务器L实例评测|安装Java8环境 & 配置环境变量 & spring项目部署 &【!】存在问题未解决
    AM@邻域@极限定义中的符号说明
    微信小程序——简易复制文本
  • 原文地址:https://blog.csdn.net/qq_35461948/article/details/126619797