From ba309f53be158f53666ca20e2d4c9f16348f49ab Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Jul 2020 17:29:58 +0800 Subject: [PATCH] 1.优化批量添加的接口 --- build.gradle | 2 +- src/main/java/com/taover/repository/CustomJdbcTemplate.java | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 1c2d825..77833b5 100644 --- a/build.gradle +++ b/build.gradle @@ -55,7 +55,7 @@ uploadArchives { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) } pom.project { - version '2.1.12' + version '2.1.14' artifactId ARTIFACT_Id groupId GROUP_ID packaging TYPE diff --git a/src/main/java/com/taover/repository/CustomJdbcTemplate.java b/src/main/java/com/taover/repository/CustomJdbcTemplate.java index 6cf2474..3eefaa8 100644 --- a/src/main/java/com/taover/repository/CustomJdbcTemplate.java +++ b/src/main/java/com/taover/repository/CustomJdbcTemplate.java @@ -3,6 +3,7 @@ package com.taover.repository; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; @@ -16,7 +17,6 @@ import javax.persistence.Id; import javax.persistence.Table; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.transaction.annotation.Transactional; /** * @@ -449,15 +449,85 @@ public class CustomJdbcTemplate { /** * 批量添加 + * @throws Exception */ - public List addEntityList(List entityList) { - List result = new ArrayList(); - for (T entity : entityList) { - result.add(addEntityForAutoincrementId(entity)); + public int[] addEntityList(List entityList) throws Exception { + if(entityList == null || entityList.isEmpty()) { + throw new Exception("entitylist is empty or null"); } - return result; + //构造SQL语句及Entity Field列表 + List beanFieldList = new ArrayList(this.beanToTableField.size()); + String exeSql = this.constructUpdateSql(entityList.get(0), beanFieldList); + System.out.println("exeSql >>>> "+exeSql); + + //构造参数信息 + List batchArgs = new ArrayList(); + for(T item: entityList) { + Object[] itemData = this.getArgsByFieldAndEntity(item, beanFieldList); + System.out.println("exeData >>>> "+itemData); + batchArgs.add(itemData); + } + + //执行SQL + return jdbcTemplateWrite.batchUpdate(exeSql, batchArgs); } + private String constructUpdateSql(T entity, List beanFieldList) { + StringBuffer sqlInsertPart = new StringBuffer("INSERT INTO "+this.getTableSql()+"("); + StringBuffer sqlColumnPart = new StringBuffer(") VALUES ("); + Iterator beanFieldIter = this.beanToTableField.keySet().iterator(); + while(beanFieldIter.hasNext()){ + String beanFieldName = beanFieldIter.next(); + String tableFieldName = this.beanToTableField.get(beanFieldName); + Field beanField = null; + try { + beanField = this.tClassInfo.getDeclaredField(beanFieldName); + beanField.setAccessible(true); + if(beanField.get(entity) == null) { + continue; + } + } catch (Exception e) { + continue; + } + + if(tableFieldName == null || beanFieldName == null){ + continue; + } + + beanFieldList.add(beanField); + sqlInsertPart.append("`"+tableFieldName+"`,"); + sqlColumnPart.append(" ?,"); + } + return sqlInsertPart.substring(0, sqlInsertPart.length()-1)+sqlColumnPart.substring(0, sqlColumnPart.length()-1)+")"; + } + + private Object[] getArgsByFieldAndEntity(T entity, List beanFieldList) throws IllegalArgumentException, IllegalAccessException { + Object[] data = new Object[beanFieldList.size()]; + for(int i=0; i