Commit 9a55aef101dc0ce371b89a3c5a6c25105be0337d

Authored by 王彬
1 parent 0f129a61
Exists in master

optimized update by id list

build.gradle
... ... @@ -56,7 +56,7 @@ uploadArchives {
56 56 authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
57 57 }
58 58 pom.project {
59   - version '2.3.4'
  59 + version '2.3.6'
60 60 artifactId ARTIFACT_Id
61 61 groupId GROUP_ID
62 62 packaging TYPE
... ...
src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java
... ... @@ -6,6 +6,7 @@ import java.sql.Connection;
6 6 import java.sql.PreparedStatement;
7 7 import java.sql.SQLException;
8 8 import java.util.ArrayList;
  9 +import java.util.Collection;
9 10 import java.util.Collections;
10 11 import java.util.HashMap;
11 12 import java.util.Iterator;
... ... @@ -47,6 +48,8 @@ public class CustomJdbcTemplateWrapperTenant<T, ID extends Number> implements Cu
47 48 @Resource
48 49 private JdbcTemplateWrapperTenant _jdbcTemplateWrapperTenant;
49 50  
  51 + private static int DEFAULT_BATCH_SIZE_WHEN_UPDATE_BY_IDLIST = 100;
  52 +
50 53 private Map<String, String> _beanToTableField;
51 54 private Map<String, String> _tableToBeanField;
52 55 private String _tableFieldNameListGapWithComma;
... ... @@ -557,13 +560,16 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
557 560 }
558 561  
559 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 564 if(null == idList){
562 565 throw new RuntimeException("params[idList] is null");
563 566 }
564 567 if (null == changeList || changeList.size() == 0) {
565 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 574 StringBuffer sql = new StringBuffer("UPDATE "+this.getTableSql()+" SET");
569 575 StringBuffer pql = new StringBuffer(sql.toString());
... ... @@ -571,15 +577,15 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
571 577 this.appendSetSql(sql, pql, list, changeList);
572 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 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 587 //满100条则向mysql发送更新请求
582   - if(idIndex%100 == 0) {
  588 + if(idCount%batchSize == 0) {
583 589 String whereSql = " WHERE "+this.appendWhereSqlWithShardingCondition(this._idTableFieldName+" in ("+idSb.toString().substring(0, idSb.length()-1)+") ", shardingKey);
584 590 this._jdbcTemplateWrapperTenant.update(updateAndFromSql+whereSql, shardingKey, list.toArray());
585 591 idSb.setLength(0);
... ... @@ -592,6 +598,11 @@ public class CustomJdbcTemplateWrapperTenant&lt;T, ID extends Number&gt; implements Cu
592 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 607 @Override
597 608 public int updateEntityByCondition(List<Object[]> updateObj, List<Object[]> condition, Long shardingKey){
... ...
src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java
1 1 package com.taover.repository;
2 2  
  3 +import java.util.Collection;
3 4 import java.util.List;
4 5 import java.util.Map;
5 6  
... ... @@ -123,7 +124,16 @@ public interface CustomJdbcTemplateWrapperTenantInterface&lt;T, ID extends Number&gt;
123 124 * @param tenantId
124 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 139 * List<Object[]> updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。
... ...