最近有个需求,就是批量处理数据,但是并发量应该很大,当时第一时间想到得是mybatis的foreach去处理,但是后来通过查资料发现,相对有spring 的jdbcTemplate处理速度,mybatis还是有些慢,后来就自己重写了一下jdbcTemplate的批量处理代码:

  1. public void batchCarFlowInsert(List<FlowCarReportDayBo> list) {
  2.  
  3. String sql =" INSERT INTO flow_report_day (id, park_number, park_name, start_time, nature_sum_count, " +
  4. " temp_car_count, vip_car_count, in_car_count, out_car_count, charge_sum_count, charge_car_count, " +
  5. " free_car_count, discount_sum_count, discount_local_car_count, discount_bussiness_car_count, " +
  6. " visit_in_car_count, visit_out_car_count, black_in_car_count, black_out_car_count) " +
  7. " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
  8. List<Object[]> args = transformFlowCarReportDayBoToObjects(list);
  9. int fromIndex = 0; int toIndex = BATCH_SIZE;
  10. while (fromIndex != args.size()) {
  11. if (toIndex > args.size()) {
  12. toIndex = args.size();
  13. }
  14. this.jdbcTemplate.batchUpdate(sql,args.subList(fromIndex, toIndex));
  15. fromIndex = toIndex;
  16. toIndex += BATCH_SIZE;
  17. if (toIndex > args.size())
  18. toIndex = args.size();
  19. }
  20.  
  21. }

最主要是的是将List<bean>转换为List<Object[]> :

  1. private List<Object[]> transformFlowCarReportDayBoToObjects(List<FlowCarReportDayBo> flowCarReportDayBoList) {
  2.  
  3. List<Object[]> list = new ArrayList<>();
  4.  
  5. Object[] object = null;
  6. for(FlowCarReportDayBo flowCarReportDayBo :flowCarReportDayBoList){
  7. object = new Object[]{
  8. flowCarReportDayBo.getId(),
  9. flowCarReportDayBo.getPark_number(),
  10. flowCarReportDayBo.getPark_name(),
  11. flowCarReportDayBo.getStart_time(),
  12. flowCarReportDayBo.getNature_sum_count(),
  13. flowCarReportDayBo.getTemp_car_count(),
  14. flowCarReportDayBo.getVip_car_count(),
  15. flowCarReportDayBo.getIn_car_count(),
  16. flowCarReportDayBo.getOut_car_count(),
  17. flowCarReportDayBo.getCharge_sum_count(),
  18. flowCarReportDayBo.getCharge_car_count(),
  19. flowCarReportDayBo.getFree_car_count(),
  20. flowCarReportDayBo.getDiscount_sum_count(),
  21. flowCarReportDayBo.getDiscount_local_car_count(),
  22. flowCarReportDayBo.getDiscount_bussiness_car_count(),
  23. flowCarReportDayBo.getVisit_in_car_count(),
  24. flowCarReportDayBo.getVisit_out_car_count(),
  25. flowCarReportDayBo.getBlack_in_car_count(),
  26. flowCarReportDayBo.getBlack_out_car_count(),
  27. };
  28. list.add(object);
  29. }
  30.  
  31. return list ;
  32. }

jdbcTemplate批量插入处理数据的更多相关文章

  1. SQL-35 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作

    题目描述 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5 ...

  2. SQL-34 对于表actor批量插入如下数据

    题目描述 对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fir ...

  3. JdbcTemplate批量插入数据

    运行环境:SpringBoot,注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; 1.单表批量插入数据 @Test public ...

  4. .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库

    批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...

  5. ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)

    转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还 ...

  6. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  7. spring JdbcTemplate批量插入以及单个插入时获取id

    1. 批量更新插入 jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs) Object[]数组的长度为每条记录的参数 ...

  8. oracle 快速批量插入复杂数据的内容

    最近迷上一种批量插入的方法,一句sql解决,将需要插入的数据用with as 的方式查出来,不管多么复杂的sql,都可以用临时表的方式查出来,然后直接插入,这样代码更加清晰 流程也简单 insert ...

  9. JDBC批量插入blob数据

    图片从接口读取后是base64的字符串,所以转成byte数组进行保存. 我们一般保存数据的话,都是基本数据,对于这些图片数据大部分会将图片保存成Blob,Clob等. Blob存储的是二进制对象数据( ...

随机推荐

  1. eslint 代码缩进 报错及解决

    一.背景 使用vue在VScode中正常写的代码,报了一堆的错误,仔细检查,发现都是缩进要么多了要么少了,总之是代码不规范的的报错. 二.原因 百度查了发现代码规范默认缩进2个空格,而VScode默认 ...

  2. Python 进程(一)理论部分

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在运行程序的一个抽象,在早期面向进程设计的计算机结构中,进程是程 ...

  3. mvc设计模式的优点

    软件设计的理念是:高内聚,低耦合.采用三层: UI:(jsp,servlet), service:(具体的业务实现), dao:(对数据库的操作) 的设计模式来指导项目开发可以使得项目各层之间是一个粗 ...

  4. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  5. antd pro 分支

    添加图片 这两种都可以 form表单问题 1 @Form.create() 这是绑定表单和组件,必须有,这样就能从this.props 中找到Form了 2 Select 要写initialValue ...

  6. 64位ubuntu安装交叉编译工具链,显示找不到命令

    是因为Ubuntu64位版本已不支持ia32-libs的软件包,而是使用了lib32ncurses5.lib32z1软件包做为替代, 所以在Ubuntu16.04版本当中应该安装执行: sudo ap ...

  7. HTML基础知识个人总结

    [学习的网站是主要是W3school,还加上一些其他搜索学习到的内容,仅在博客做个人整理] 一.标签——尖括号围成的关键词,成对出现. ※使用时必须符合标签嵌套规则 1. (1) <!DOCTY ...

  8. 微信跳转外部浏览器打开指定H5链接的功能源码

    通常大家在微信内转发分享H5链接的时候都很容易碰到H5链接在微信内无法打开或在微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要 ...

  9. [Cordova 之 入门篇]

    1. cordova是什么 Apache Cordova是一个开源的移动开发框架.允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 2. 为什么用cordova 基于 ...

  10. Windows 10 & React Native & Android

    Windows 10 & React Native & Android https://facebook.github.io/react-native/docs/getting-sta ...