Commit ba309f53be158f53666ca20e2d4c9f16348f49ab

Authored by unknown
1 parent 249f5861

1.优化批量添加的接口

@@ -55,7 +55,7 @@ uploadArchives { @@ -55,7 +55,7 @@ uploadArchives {
55 authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) 55 authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
56 } 56 }
57 pom.project { 57 pom.project {
58 - version '2.1.12' 58 + version '2.1.14'
59 artifactId ARTIFACT_Id 59 artifactId ARTIFACT_Id
60 groupId GROUP_ID 60 groupId GROUP_ID
61 packaging TYPE 61 packaging TYPE
src/main/java/com/taover/repository/CustomJdbcTemplate.java
@@ -3,6 +3,7 @@ package com.taover.repository; @@ -3,6 +3,7 @@ package com.taover.repository;
3 import java.io.Serializable; 3 import java.io.Serializable;
4 import java.lang.reflect.Field; 4 import java.lang.reflect.Field;
5 import java.lang.reflect.ParameterizedType; 5 import java.lang.reflect.ParameterizedType;
  6 +import java.math.BigDecimal;
6 import java.math.BigInteger; 7 import java.math.BigInteger;
7 import java.util.ArrayList; 8 import java.util.ArrayList;
8 import java.util.HashMap; 9 import java.util.HashMap;
@@ -16,7 +17,6 @@ import javax.persistence.Id; @@ -16,7 +17,6 @@ import javax.persistence.Id;
16 import javax.persistence.Table; 17 import javax.persistence.Table;
17 18
18 import org.springframework.jdbc.core.JdbcTemplate; 19 import org.springframework.jdbc.core.JdbcTemplate;
19 -import org.springframework.transaction.annotation.Transactional;  
20 20
21 /** 21 /**
22 * 22 *
@@ -449,15 +449,85 @@ public class CustomJdbcTemplate<T, ID extends Serializable> { @@ -449,15 +449,85 @@ public class CustomJdbcTemplate<T, ID extends Serializable> {
449 449
450 /** 450 /**
451 * 批量添加 451 * 批量添加
  452 + * @throws Exception
452 */ 453 */
453 - public List<BigInteger> addEntityList(List<T> entityList) {  
454 - List<BigInteger> result = new ArrayList<BigInteger>();  
455 - for (T entity : entityList) {  
456 - result.add(addEntityForAutoincrementId(entity)); 454 + public int[] addEntityList(List<T> entityList) throws Exception {
  455 + if(entityList == null || entityList.isEmpty()) {
  456 + throw new Exception("entitylist is empty or null");
457 } 457 }
458 - return result; 458 + //构造SQL语句及Entity Field列表
  459 + List<Field> beanFieldList = new ArrayList<Field>(this.beanToTableField.size());
  460 + String exeSql = this.constructUpdateSql(entityList.get(0), beanFieldList);
  461 + System.out.println("exeSql >>>> "+exeSql);
  462 +
  463 + //构造参数信息
  464 + List<Object[]> batchArgs = new ArrayList<Object[]>();
  465 + for(T item: entityList) {
  466 + Object[] itemData = this.getArgsByFieldAndEntity(item, beanFieldList);
  467 + System.out.println("exeData >>>> "+itemData);
  468 + batchArgs.add(itemData);
  469 + }
  470 +
  471 + //执行SQL
  472 + return jdbcTemplateWrite.batchUpdate(exeSql, batchArgs);
459 } 473 }
460 474
  475 + private String constructUpdateSql(T entity, List<Field> beanFieldList) {
  476 + StringBuffer sqlInsertPart = new StringBuffer("INSERT INTO "+this.getTableSql()+"(");
  477 + StringBuffer sqlColumnPart = new StringBuffer(") VALUES (");
  478 + Iterator<String> beanFieldIter = this.beanToTableField.keySet().iterator();
  479 + while(beanFieldIter.hasNext()){
  480 + String beanFieldName = beanFieldIter.next();
  481 + String tableFieldName = this.beanToTableField.get(beanFieldName);
  482 + Field beanField = null;
  483 + try {
  484 + beanField = this.tClassInfo.getDeclaredField(beanFieldName);
  485 + beanField.setAccessible(true);
  486 + if(beanField.get(entity) == null) {
  487 + continue;
  488 + }
  489 + } catch (Exception e) {
  490 + continue;
  491 + }
  492 +
  493 + if(tableFieldName == null || beanFieldName == null){
  494 + continue;
  495 + }
  496 +
  497 + beanFieldList.add(beanField);
  498 + sqlInsertPart.append("`"+tableFieldName+"`,");
  499 + sqlColumnPart.append(" ?,");
  500 + }
  501 + return sqlInsertPart.substring(0, sqlInsertPart.length()-1)+sqlColumnPart.substring(0, sqlColumnPart.length()-1)+")";
  502 + }
  503 +
  504 + private Object[] getArgsByFieldAndEntity(T entity, List<Field> beanFieldList) throws IllegalArgumentException, IllegalAccessException {
  505 + Object[] data = new Object[beanFieldList.size()];
  506 + for(int i=0; i<data.length; ++i) {
  507 + Field itemField = beanFieldList.get(i);
  508 + Object itemData = itemField.get(entity);
  509 + if(itemData == null) {
  510 + data[i] = this.getDefaultValueByFieldType(itemField);
  511 + }else {
  512 + data[i] = itemData;
  513 + }
  514 + }
  515 + return data;
  516 + }
  517 +
  518 + private Object getDefaultValueByFieldType(Field itemField) {
  519 + String simpleName = itemField.getType().getSimpleName();
  520 + if("String".equals(simpleName)) {
  521 + return "";
  522 + }else if("Date".equals(simpleName) || "Timestamp".equals(simpleName)) {
  523 + return "2000-01-01 00:00:00";
  524 + }else if("BigDecimal".equals(simpleName)){
  525 + return BigDecimal.ZERO;
  526 + }else {
  527 + return 0;
  528 + }
  529 + }
  530 +
461 /** 531 /**
462 * 按ID删除 532 * 按ID删除
463 */ 533 */