之前在做项目时,使用mybatis,批量执行sql,这里简单写下步骤

  • 在配置数据库连接时,加入一个参数,例如

jdbc:mysql://127.0.0.1:3307/mvs-report?allowMultiQueries=true

  • 在mybatis执行时传入list集合参数,
  • 在mybatis的xml文件中拼装sql,例如
<insert id="batchInsert" parameterType="java.util.List" >
insert into rpt_fault (FAULT_ID, FAULT_NAME)
values
<foreach collection="list" item="item" separator=",">
(#{item.faultId,jdbcType=INTEGER}, #{item.faultName,jdbcType=VARCHAR})
</foreach>
</insert>
  • 一般来说这就满足需求了,但是为了更好的扩展,最好是指定一个集合最大值,这样一来方便在不同配置的服务器上切换,手动调节阈值。本示例使用了java反射特性来实现,具体如下

         private static final int ADD_MAX = 200;
    private static final int DELETE_MAX = 500;
    public static void executeBatchAdd(Object mapper, List<?> list) throws Exception {
    if (Objects.isNull(list) || list.isEmpty())
    return; try {
    Method method = mapper.getClass().getMethod("batchInsert", List.class);
    int size = list.size();
    if (size > ADD_MAX) {
    int num = (size) / ADD_MAX + 1;
    int start = 0, end = 0;
    for (int i = 1; i <= num; i++) {
    start = (i - 1) * ADD_MAX;
    end = (i * ADD_MAX) > size ? size : (i * ADD_MAX);
    method.invoke(mapper, list.subList(start, end));
    }
    } else
    method.invoke(mapper, list);
    } catch (Exception e) {
    logger.error("批量插入任务执行失败:", e.getMessage(), e);
    throw e;
    } finally {
    list.clear();
    }
    }

    最后补充:

  • 有时候我们在使用mysql数据库时候,当我们的阈值过大时,可能会遇到过more than 'max_binlog_cache_size' bytes of storage 的错误
  • 这是不要慌,这是mysql默认的日志提交字节太小导致的。
  • 首先查看当前设置的大小:show variables like '%binlog_%size%';
  • 然后酌情设置set global max_binlog_cache_size=10737418240;
  • 此种方式不用重启数据库服务器,较为简便。

mybatis批量提交的更多相关文章

  1. MyBatis 通过 BATCH 批量提交

    本文由 简悦 SimpRead 转码, 原文地址 https://www.jb51.net/article/153382.htm 很多人在用 MyBatis 或者 通用 Mapper 时,经常会问有没 ...

  2. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  3. Mybatis批量insert报错的解决办法【the right syntax to use near '' at line...】

    Java中使用Mybatis批量插入数据时Mapper.xml中的sql如下: <insert id="batchSave"> into t_emp(emp_name, ...

  4. Mybatis 批量插入

    一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...

  5. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  6. myBatis批量查询操作,xml中使用foreach案例

    使用场景:有一个订单表,实体类为OrderBase.java,订单有个状态为status值可能为"1,2,3,4,5,6",现在需要查询状态为"2,3,4"的订 ...

  7. php中bindValue的批量提交sql语句

    php预编译sql语句,可以批量提交sql,也可以实现防注入 <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $usernam ...

  8. js 批量提交数据

    // 批量提交数据 let pageSize = 100, total = dataTmp.length, list = dataTmp let totalPage = Math.ceil(total ...

  9. mybatis批量更新报错badsql

    mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...

随机推荐

  1. Course3-Python文件I/O

    1. 读取键盘输入 Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1). raw_input. raw_input([prompt]) 函数从标准输入读取一个行, ...

  2. ajax-------封装

    function ajax(url, fnSucc, fnFaild){ //1.创建Ajax对象 var oAjax=null; if(window.XMLHttpRequest) { oAjax= ...

  3. PLSQL 创建自定义函数注意事项

    2017-6-8周四,今天遇到的需求是,从数据库中查找出某张表的某些数据,并将这些数据做简单的加减运算再得到结果集,没有思路,后来问辉哥,给我的建议是给这些运算封装成一个SQL函数,select选择字 ...

  4. eclipse中英文(等各国语言)版本转换发放

    eclipse界面语言的切换方法 1.该方法只支持安装过中文包的eclipse(其实中文包中几乎包含了全世界所有的语言,只是调用了其中的中文简体而已) 2.在桌面的快捷方式中目标的地址后面加上参数-n ...

  5. Android Java端的Socket.io-client

    先讲讲历史,这个方面最早的应该是nkzawa@github的项目:http://mvnrepository.com/artifact/com.github.nkzawa/socket.io-clien ...

  6. python3学习笔记2---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/2

    2018-03-01数据结构和算法(2) 1.6字典中的键映射多个值 一个字典就是一个键对应一个单值的映射.如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面. ...

  7. 获取radio、select、checkbox标签选中的值

    <input type="radio" id="radio1" name="radio"><label for=" ...

  8. 学习了解CyclicBarrier

    CyclicBarrier我的理解就是一个线程等待器,用途就是将注册了这个barrier的线程卡在同一个位置,直到注册这个barrier的所有线程都完成之后,继续执行.下面是一个学习过程中采用的示例, ...

  9. Tomcat PermGen space的解决方案

    Tomcat报告 Caused by: java.lang.OutOfMemoryError: PermGen space异常 内存溢出PermGen space的全称是Permanent Gener ...

  10. Robot framework之元素定位实战

    1.1  id 和name 定位 Web页面都是由许多标签和元素组成的,每个标签或元素都是很多属性,好比一个人   id 和name 可以看作一个人的身份证号和姓名.下面看下教育局招生系统的用户名输入 ...