mybatis批量提交
之前在做项目时,使用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批量提交的更多相关文章
- MyBatis 通过 BATCH 批量提交
本文由 简悦 SimpRead 转码, 原文地址 https://www.jb51.net/article/153382.htm 很多人在用 MyBatis 或者 通用 Mapper 时,经常会问有没 ...
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...
- Mybatis批量insert报错的解决办法【the right syntax to use near '' at line...】
Java中使用Mybatis批量插入数据时Mapper.xml中的sql如下: <insert id="batchSave"> into t_emp(emp_name, ...
- Mybatis 批量插入
一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...
- mybatis批量插入数据到oracle
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
- myBatis批量查询操作,xml中使用foreach案例
使用场景:有一个订单表,实体类为OrderBase.java,订单有个状态为status值可能为"1,2,3,4,5,6",现在需要查询状态为"2,3,4"的订 ...
- php中bindValue的批量提交sql语句
php预编译sql语句,可以批量提交sql,也可以实现防注入 <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $usernam ...
- js 批量提交数据
// 批量提交数据 let pageSize = 100, total = dataTmp.length, list = dataTmp let totalPage = Math.ceil(total ...
- mybatis批量更新报错badsql
mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...
随机推荐
- 解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列
本节内容 1.迭代器协议与for循环 2.三元表达式 3.解压序列 4.列表解析 5.生成器 迭代器协议与for循环 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中下一项, ...
- LINQ、Lambda与委托
首先定义个Person类: public class Person { public string Name{get;set;} //姓名 public int Age{get;set;} //年龄 ...
- 【读书笔记】C++Primer---第三章
1.由于为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型: 2.以下代码中,cin有几点需要注意:a.读取并忽略开头所有的空白字符(如空格.换行符.制表符):b.读取字符直至再次遇 ...
- FFPLAY的原理(五)
创建线程 Spawning Threads Overview Last time we added audio support by taking advantage of SDL's audio f ...
- clear read-only status问题的解决
IDEA系工具可能会报出的错误. 解决方法见官方文档吧:Changing Read-Only Status of Files : https://www.jetbrains.com/help/ide ...
- POSTGRESQL 并发控制
http://meidayhxp.blog.163.com/blog/static/117608156201210243837491/ 这个内容是官方Doc中的一章,具体是那一版的,还未确认. 第九章 ...
- cbp2make使用
codeblock中的cbp2make插件能自动生成makefile文件,这里介绍一下从安装到使用到的过程. 首先下载cbp2make,下载的包后缀名是.tar.gz.Linux里双击该下载文件,解压 ...
- 拾人牙慧篇之——linux文件挂载,基于nfs的文件共享系统安装配置
一.写在前面 最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,阿里云的项目平时开发启动的时候知道有个nfs文件系统,表现就是后台管理系统通过freemarker生成的HTML文件,自动 ...
- 深入理解css3中的线性渐变
css3中的线性渐变 线性渐变公式: background-image: linear-gradient( [ <angle> | <side-or-corner> ]?, & ...
- Laravel 框架 基础(一)
Laravel 框架 laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化 Eloquent 全局作用域.可选择的认证脚手架.中间件组. ...