SSM框架中集成批量插入Mysql数据库功能

18 篇文章 1 订阅

如果导入的数据在万条以上,项目中生成的导入功能数据在万条以上会变得非常慢,然后优化了一下,经测试,几万的数据在10秒内成功导入。感觉还是有需要优化的地方,时间精力有限,有优化的希望多交流交流。上代码:


[java] view plain copy
  1. package com.jh5bframework.test.testdemo;  
  2. /** 
  3.  * 批量导入功能优化(万条以上) 
  4.  */  
  5. import java.util.ArrayList;  
  6. import java.util.Date;  
  7. import java.util.List;  
  8. import org.apache.commons.lang3.StringUtils;  
  9. import org.junit.Test;  
  10. import org.springframework.beans.factory.annotation.Autowired;  
  11. import org.springframework.jdbc.core.JdbcTemplate;  
  12.   
  13. public class TestDemo {  
  14.   
  15.     @Autowired  
  16.     private  JdbcTemplate jt;  
  17.       
  18.     @Test  
  19.     public void test1() {  
  20.         String sql = "INSERT INTO test_import(id,name) VALUES";// 假设表test_import中有两个字段id和name  
  21.         List<String[]> liststr = new ArrayList<String[]>();  
  22.         int listSize = 12;// 定义要插入数据的总条数  
  23.   
  24.         String[] str = null;  
  25.         for (int i = 0; i < listSize; i++) {  
  26.             str = new String[2];// 假设有两个字段  
  27.             str[0] = i + "";// 对第一个字段赋值  
  28.             str[1] = "name" + i;// 对第二个字段赋值  
  29.             liststr.add(str);  
  30.         }  
  31.         System.out.println("liststr:" + liststr);  
  32.         System.out.println("开始时间:" + new Date());  
  33.         dataBatchInsertToMysqlDao(sql, liststr);  
  34.         System.out.println("结束时间:" + new Date());  
  35.     }  
  36.   
  37.     /** 
  38.      * 数据批量插入Mysql 
  39.      */  
  40.     public int dataBatchInsertToMysqlDao(String sql, List<String[]> list) {  
  41.         try {  
  42.             int x = list.size() / 10000;  
  43.             int y = 0;  
  44.             String strb;  
  45.             StringBuffer strb1 = null;  
  46.             if (x < 2) {  
  47.                 strb1 = new StringBuffer(sql);  
  48.                 for (int i = 0; i < list.size(); i++) {  
  49.                     String[] str = list.get(i);  
  50.                     strb = "('" + StringUtils.join(str, "','") + "',";  
  51.                     strb1.append(strb.substring(0, strb.length() - 1) + "),");  
  52.                 }  
  53.                 System.out.println("sql:"+strb1.substring(0, strb1.length() - 1));  
  54.                 return jt.update(strb1.substring(0, strb1.length() - 1));  
  55.             } else {  
  56.                 for (int k = 0; k < x; k++) {// 2万条以上的数据先插入整数万条  
  57.                     strb1 = new StringBuffer(sql);  
  58.                     for (int i = k * 10000; i < (k + 1) * 10000; i++) {  
  59.                         String[] str = list.get(i);  
  60.                         strb = "('" + StringUtils.join(str, "','") + "',";  
  61.                         strb1.append(strb.substring(0, strb.length() - 1)  
  62.                                 + "),");  
  63.                     }  
  64.                     System.out.println("sql:"  
  65.                             + strb1.substring(0, strb1.length() - 1));  
  66.                     y += jt.update(strb1.substring(0, strb1.length() - 1));  
  67.                 }  
  68.                 if (list.size() > y) {// 对整万剩下的数据进行插入  
  69.                     strb1 = new StringBuffer(sql);  
  70.                     for (int k = y; k < list.size(); k++) {  
  71.                         String[] str = list.get(k);  
  72.                         strb = "('" + StringUtils.join(str, "','") + "',";  
  73.                         strb1.append(strb.substring(0, strb.length() - 1)  
  74.                                 + "),");  
  75.   
  76.                     }  
  77.                     y += jt.update(strb1.substring(0, strb1.length() - 1));  
  78.                 }  
  79.                 return y;  
  80.             }  
  81.         } catch (Exception e) {  
  82.               
  83.             return 0;  
  84.         }  
  85.     }  
  86.   
  87. }  

配置文件中修改:

[java] view plain copy
  1. <!-- 数据源配置, 使用应用服务器的数据库连接池   
  2.     <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/jh5bframework" />-->  
  3.        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  4.        <property name="dataSource" ref="dataSource">  
  5.        </property>  
  6.        </bean>  

代码中调用StringUtils.join()方法需要使用commons-lang3-3.3.2.jar这个包。这个实际上是导入Excel表格,读取其中的数据,并将数据插入到Mysql数据库中代码的一部分,这里我省略了读取excel表格中的数据这部分。



转载地址:http://blog.csdn.net/qq_16497617/article/details/52462051



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值