Commit 9a55aef101dc0ce371b89a3c5a6c25105be0337d

Authored by 王彬
1 parent 0f129a61
Exists in master

optimized update by id list

@@ -56,7 +56,7 @@ uploadArchives { @@ -56,7 +56,7 @@ uploadArchives {
56 authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) 56 authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
57 } 57 }
58 pom.project { 58 pom.project {
59 - version '2.3.4' 59 + version '2.3.6'
60 artifactId ARTIFACT_Id 60 artifactId ARTIFACT_Id
61 groupId GROUP_ID 61 groupId GROUP_ID
62 packaging TYPE 62 packaging TYPE
src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java
@@ -6,6 +6,7 @@ import java.sql.Connection; @@ -6,6 +6,7 @@ import java.sql.Connection;
6 import java.sql.PreparedStatement; 6 import java.sql.PreparedStatement;
7 import java.sql.SQLException; 7 import java.sql.SQLException;
8 import java.util.ArrayList; 8 import java.util.ArrayList;
  9 +import java.util.Collection;
9 import java.util.Collections; 10 import java.util.Collections;
10 import java.util.HashMap; 11 import java.util.HashMap;
11 import java.util.Iterator; 12 import java.util.Iterator;
@@ -47,6 +48,8 @@ public class CustomJdbcTemplateWrapperTenant<T, ID extends Number> implements Cu @@ -47,6 +48,8 @@ public class CustomJdbcTemplateWrapperTenant<T, ID extends Number> implements Cu
47 @Resource 48 @Resource
48 private JdbcTemplateWrapperTenant _jdbcTemplateWrapperTenant; 49 private JdbcTemplateWrapperTenant _jdbcTemplateWrapperTenant;
49 50
  51 + private static int DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST = 100;
  52 +
50 private Map<String, String> _beanToTableField; 53 private Map<String, String> _beanToTableField;
51 private Map<String, String> _tableToBeanField; 54 private Map<String, String> _tableToBeanField;
52 private String _tableFieldNameListGapWithComma; 55 private String _tableFieldNameListGapWithComma;
@@ -557,13 +560,16 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu @@ -557,13 +560,16 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
557 } 560 }
558 561
559 @Override 562 @Override
560 - public void updateEntityByIdList(List<Object[]> changeList, List<ID> idList, Long shardingKey) { 563 + public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Integer batchSize, Long shardingKey) {
561 if(null == idList){ 564 if(null == idList){
562 throw new RuntimeException("params[idList] is null"); 565 throw new RuntimeException("params[idList] is null");
563 } 566 }
564 if (null == changeList || changeList.size() == 0) { 567 if (null == changeList || changeList.size() == 0) {
565 throw new RuntimeException("params[changeList] is empty"); 568 throw new RuntimeException("params[changeList] is empty");
566 } 569 }
  570 + if(batchSize == null) {
  571 + batchSize = DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST;
  572 + }
567 573
568 StringBuffer sql = new StringBuffer("UPDATE "+this.getTableSql()+" SET"); 574 StringBuffer sql = new StringBuffer("UPDATE "+this.getTableSql()+" SET");
569 StringBuffer pql = new StringBuffer(sql.toString()); 575 StringBuffer pql = new StringBuffer(sql.toString());
@@ -571,15 +577,15 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu @@ -571,15 +577,15 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
571 this.appendSetSql(sql, pql, list, changeList); 577 this.appendSetSql(sql, pql, list, changeList);
572 String updateAndFromSql = sql.substring(0, sql.length()-1); 578 String updateAndFromSql = sql.substring(0, sql.length()-1);
573 579
574 - int idIndex = 0;  
575 - int idListSize = idList.size(); 580 + Iterator<ID> idIter = idList.iterator();
  581 + int idCount = 0;
576 StringBuffer idSb = new StringBuffer(); 582 StringBuffer idSb = new StringBuffer();
577 - while(idIndex < idListSize) {  
578 - idSb.append(idList.get(idIndex)+",");  
579 - ++idIndex; 583 + while(idIter.hasNext()) {
  584 + idSb.append(idIter.next()+",");
  585 + ++idCount;
580 586
581 //满100条则向mysql发送更新请求 587 //满100条则向mysql发送更新请求
582 - if(idIndex%100 == 0) { 588 + if(idCount%batchSize == 0) {
583 String whereSql = " WHERE "+this.appendWhereSqlWithShardingCondition(this._idTableFieldName+" in ("+idSb.toString().substring(0, idSb.length()-1)+") ", shardingKey); 589 String whereSql = " WHERE "+this.appendWhereSqlWithShardingCondition(this._idTableFieldName+" in ("+idSb.toString().substring(0, idSb.length()-1)+") ", shardingKey);
584 this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray()); 590 this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray());
585 idSb.setLength(0); 591 idSb.setLength(0);
@@ -592,6 +598,11 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu @@ -592,6 +598,11 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
592 this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray()); 598 this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray());
593 } 599 }
594 } 600 }
  601 +
  602 + @Override
  603 + public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Long shardingKey) {
  604 + this.updateEntityByIdList(changeList, idList, DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST, shardingKey);
  605 + }
595 606
596 @Override 607 @Override
597 public int updateEntityByCondition(List<Object[]> updateObj, List<Object[]> condition, Long shardingKey){ 608 public int updateEntityByCondition(List<Object[]> updateObj, List<Object[]> condition, Long shardingKey){
src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java
1 package com.taover.repository; 1 package com.taover.repository;
2 2
  3 +import java.util.Collection;
3 import java.util.List; 4 import java.util.List;
4 import java.util.Map; 5 import java.util.Map;
5 6
@@ -123,7 +124,16 @@ public interface CustomJdbcTemplateWrapperTenantInterface&lt;T, ID extends Number&gt; @@ -123,7 +124,16 @@ public interface CustomJdbcTemplateWrapperTenantInterface&lt;T, ID extends Number&gt;
123 * @param tenantId 124 * @param tenantId
124 * @return 125 * @return
125 */ 126 */
126 - public void updateEntityByIdList(List<Object[]> changeList, List<ID> idList, Long tenantId); 127 + public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Long tenantId);
  128 +
  129 + /**
  130 + * 根据ID列表修改指定数据
  131 + * @param changeList
  132 + * @param idList
  133 + * @param batchSize
  134 + * @param tenantId
  135 + */
  136 + public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Integer batchSize, Long tenantId);
127 137
128 /** 138 /**
129 * List<Object[]> updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。 139 * List<Object[]> updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。