From 9a55aef101dc0ce371b89a3c5a6c25105be0337d Mon Sep 17 00:00:00 2001 From: 王彬 Date: Thu, 10 Jun 2021 18:31:43 +0800 Subject: [PATCH] optimized update by id list --- build.gradle | 2 +- src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java | 25 ++++++++++++++++++------- src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java | 12 +++++++++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 2a2b024..90028e0 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ uploadArchives { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) } pom.project { - version '2.3.4' + version '2.3.6' artifactId ARTIFACT_Id groupId GROUP_ID packaging TYPE diff --git a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java index 03960f4..ff99051 100644 --- a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java +++ b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java @@ -6,6 +6,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -47,6 +48,8 @@ public class CustomJdbcTemplateWrapperTenant implements Cu @Resource private JdbcTemplateWrapperTenant _jdbcTemplateWrapperTenant; + private static int DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST = 100; + private Map _beanToTableField; private Map _tableToBeanField; private String _tableFieldNameListGapWithComma; @@ -557,13 +560,16 @@ public class CustomJdbcTemplateWrapperTenant implements Cu } @Override - public void updateEntityByIdList(List changeList, List idList, Long shardingKey) { + public void updateEntityByIdList(List changeList, Collection idList, Integer batchSize, Long shardingKey) { if(null == idList){ throw new RuntimeException("params[idList] is null"); } if (null == changeList || changeList.size() == 0) { throw new RuntimeException("params[changeList] is empty"); } + if(batchSize == null) { + batchSize = DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST; + } StringBuffer sql = new StringBuffer("UPDATE "+this.getTableSql()+" SET"); StringBuffer pql = new StringBuffer(sql.toString()); @@ -571,15 +577,15 @@ public class CustomJdbcTemplateWrapperTenant implements Cu this.appendSetSql(sql, pql, list, changeList); String updateAndFromSql = sql.substring(0, sql.length()-1); - int idIndex = 0; - int idListSize = idList.size(); + Iterator idIter = idList.iterator(); + int idCount = 0; StringBuffer idSb = new StringBuffer(); - while(idIndex < idListSize) { - idSb.append(idList.get(idIndex)+","); - ++idIndex; + while(idIter.hasNext()) { + idSb.append(idIter.next()+","); + ++idCount; //满100条则向mysql发送更新请求 - if(idIndex%100 == 0) { + if(idCount%batchSize == 0) { String whereSql = " WHERE "+this.appendWhereSqlWithShardingCondition(this._idTableFieldName+" in ("+idSb.toString().substring(0, idSb.length()-1)+") ", shardingKey); this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray()); idSb.setLength(0); @@ -592,6 +598,11 @@ public class CustomJdbcTemplateWrapperTenant implements Cu this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray()); } } + + @Override + public void updateEntityByIdList(List changeList, Collection idList, Long shardingKey) { + this.updateEntityByIdList(changeList, idList, DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST, shardingKey); + } @Override public int updateEntityByCondition(List updateObj, List condition, Long shardingKey){ diff --git a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java index bf31312..cfd0533 100644 --- a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java +++ b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java @@ -1,5 +1,6 @@ package com.taover.repository; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -123,7 +124,16 @@ public interface CustomJdbcTemplateWrapperTenantInterface * @param tenantId * @return */ - public void updateEntityByIdList(List changeList, List idList, Long tenantId); + public void updateEntityByIdList(List changeList, Collection idList, Long tenantId); + + /** + * 根据ID列表修改指定数据 + * @param changeList + * @param idList + * @param batchSize + * @param tenantId + */ + public void updateEntityByIdList(List changeList, Collection idList, Integer batchSize, Long tenantId); /** * List updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。 -- libgit2 0.21.2