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存储的是二进制对象数据( ...
随机推荐
- eslint 代码缩进 报错及解决
一.背景 使用vue在VScode中正常写的代码,报了一堆的错误,仔细检查,发现都是缩进要么多了要么少了,总之是代码不规范的的报错. 二.原因 百度查了发现代码规范默认缩进2个空格,而VScode默认 ...
- Python 进程(一)理论部分
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在运行程序的一个抽象,在早期面向进程设计的计算机结构中,进程是程 ...
- mvc设计模式的优点
软件设计的理念是:高内聚,低耦合.采用三层: UI:(jsp,servlet), service:(具体的业务实现), dao:(对数据库的操作) 的设计模式来指导项目开发可以使得项目各层之间是一个粗 ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- antd pro 分支
添加图片 这两种都可以 form表单问题 1 @Form.create() 这是绑定表单和组件,必须有,这样就能从this.props 中找到Form了 2 Select 要写initialValue ...
- 64位ubuntu安装交叉编译工具链,显示找不到命令
是因为Ubuntu64位版本已不支持ia32-libs的软件包,而是使用了lib32ncurses5.lib32z1软件包做为替代, 所以在Ubuntu16.04版本当中应该安装执行: sudo ap ...
- HTML基础知识个人总结
[学习的网站是主要是W3school,还加上一些其他搜索学习到的内容,仅在博客做个人整理] 一.标签——尖括号围成的关键词,成对出现. ※使用时必须符合标签嵌套规则 1. (1) <!DOCTY ...
- 微信跳转外部浏览器打开指定H5链接的功能源码
通常大家在微信内转发分享H5链接的时候都很容易碰到H5链接在微信内无法打开或在微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要 ...
- [Cordova 之 入门篇]
1. cordova是什么 Apache Cordova是一个开源的移动开发框架.允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 2. 为什么用cordova 基于 ...
- Windows 10 & React Native & Android
Windows 10 & React Native & Android https://facebook.github.io/react-native/docs/getting-sta ...