jdbcTemplate批量插入处理数据
最近有个需求,就是批量处理数据,但是并发量应该很大,当时第一时间想到得是mybatis的foreach去处理,但是后来通过查资料发现,相对有spring 的jdbcTemplate处理速度,mybatis还是有些慢,后来就自己重写了一下jdbcTemplate的批量处理代码:
public void batchCarFlowInsert(List<FlowCarReportDayBo> list) {
String sql =" INSERT INTO flow_report_day (id, park_number, park_name, start_time, nature_sum_count, " +
" temp_car_count, vip_car_count, in_car_count, out_car_count, charge_sum_count, charge_car_count, " +
" free_car_count, discount_sum_count, discount_local_car_count, discount_bussiness_car_count, " +
" visit_in_car_count, visit_out_car_count, black_in_car_count, black_out_car_count) " +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
List<Object[]> args = transformFlowCarReportDayBoToObjects(list);
int fromIndex = 0; int toIndex = BATCH_SIZE;
while (fromIndex != args.size()) {
if (toIndex > args.size()) {
toIndex = args.size();
}
this.jdbcTemplate.batchUpdate(sql,args.subList(fromIndex, toIndex));
fromIndex = toIndex;
toIndex += BATCH_SIZE;
if (toIndex > args.size())
toIndex = args.size();
}
}
最主要是的是将List<bean>转换为List<Object[]> :
private List<Object[]> transformFlowCarReportDayBoToObjects(List<FlowCarReportDayBo> flowCarReportDayBoList) {
List<Object[]> list = new ArrayList<>();
Object[] object = null;
for(FlowCarReportDayBo flowCarReportDayBo :flowCarReportDayBoList){
object = new Object[]{
flowCarReportDayBo.getId(),
flowCarReportDayBo.getPark_number(),
flowCarReportDayBo.getPark_name(),
flowCarReportDayBo.getStart_time(),
flowCarReportDayBo.getNature_sum_count(),
flowCarReportDayBo.getTemp_car_count(),
flowCarReportDayBo.getVip_car_count(),
flowCarReportDayBo.getIn_car_count(),
flowCarReportDayBo.getOut_car_count(),
flowCarReportDayBo.getCharge_sum_count(),
flowCarReportDayBo.getCharge_car_count(),
flowCarReportDayBo.getFree_car_count(),
flowCarReportDayBo.getDiscount_sum_count(),
flowCarReportDayBo.getDiscount_local_car_count(),
flowCarReportDayBo.getDiscount_bussiness_car_count(),
flowCarReportDayBo.getVisit_in_car_count(),
flowCarReportDayBo.getVisit_out_car_count(),
flowCarReportDayBo.getBlack_in_car_count(),
flowCarReportDayBo.getBlack_out_car_count(),
};
list.add(object);
}
return list ;
}
jdbcTemplate批量插入处理数据的更多相关文章
- SQL-35 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作
题目描述 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5 ...
- SQL-34 对于表actor批量插入如下数据
题目描述 对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fir ...
- JdbcTemplate批量插入数据
运行环境:SpringBoot,注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; 1.单表批量插入数据 @Test public ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)
转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还 ...
- .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...
- spring JdbcTemplate批量插入以及单个插入时获取id
1. 批量更新插入 jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs) Object[]数组的长度为每条记录的参数 ...
- oracle 快速批量插入复杂数据的内容
最近迷上一种批量插入的方法,一句sql解决,将需要插入的数据用with as 的方式查出来,不管多么复杂的sql,都可以用临时表的方式查出来,然后直接插入,这样代码更加清晰 流程也简单 insert ...
- JDBC批量插入blob数据
图片从接口读取后是base64的字符串,所以转成byte数组进行保存. 我们一般保存数据的话,都是基本数据,对于这些图片数据大部分会将图片保存成Blob,Clob等. Blob存储的是二进制对象数据( ...
随机推荐
- DVWA-暴力破解学习笔记
DVWA-暴力破解 1.暴力破解 2.burp安装证书 3.万能密码 一.暴力破解 burp四种暴力破解类型: sniper 一个字典,两个参数,先匹配第一项再匹配第二项 Battering ra ...
- Python之python的一些理解
应用领域: 1. 网络爬虫 2. 大数据分析与挖掘 3. 机器学习 4. web应用 5. 游戏开发 6. 自动化运维 入门学习网站: imooc,廖雪峰,黑马 环境变量 --- 就是告诉电脑,你的程 ...
- 调研行为树jbt
最近要做游戏ai,看了一下行为树的东西,因为用的java,所以主要看了jbt: https://github.com/gaia-ucm/jbt 这玩意分编辑器JBTEditor和核心库JBTCore两 ...
- HTML基础-------HTML标签(1)
HTML标签(1) h系列(容器级双标签) h系列标签分为六个等级(h1,h2,h3,h4,h5,h6) 语义:给文本添加一个标题 标题重要程度逐级递减,一个页面只能有一个h1级的标签,并且大多数时候 ...
- AppCan移动开发技巧:3步走,获取移动APP签名信息
大家知道,在移动APP开发里,与应用包名一样,应用的签名信息需是唯一的,否则将会出现应用冒领.重复安装等问题.之前分享过安卓应用的签名如何获取(点击查看),这里将继续以AppCan平台为例,分享如何获 ...
- C++ 精英化趋势
精英化趋势 C++ 是一门引起无数争议的语言.眼下最常听到的声音则是 C++ 将趋于没落,会被某某语言取代.我很怀疑这种论调的起点是商业宣传,C++ 的真实趋势应该是越来越倾向于精英化. 精英化是指在 ...
- VSCode 配置并使用less
1.安装node.js 2.安装less npm install less -g 3.安装VS插件 Easy LESS 4.编辑保存.less文件,会在对应的目录下生成对应的.css文件
- 启用k8s metrics server监控
1.创建aggregator证书 方法一:直接使用二进制源码包安装 $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfs ...
- C#关于TreeView树在节点数较多时总是会出现闪烁的问题方法记录
首先介绍下背景吧,问题如题,这个问题应该说困扰我大半年了(不是说我没有请教大佬,不是说我没有上网查过,之前在搜索时,总是没有解决此问题~~),直到最近一次在在优化代码时,再次上网查找,在发现搜索词条” ...
- 【git】git hello world
以前不怎么会用. http://blog.sina.com.cn/s/blog_1485511700102xdig.html git add 文件夹/ 添加整个文件夹及内容 gi ...