From 5212255525771956718eabdda63858a358caeede Mon Sep 17 00:00:00 2001 From: 王彬 Date: Tue, 8 Jun 2021 16:43:12 +0800 Subject: [PATCH] add support update by id list --- build.gradle | 2 +- src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java | 9 +++++++++ src/main/java/com/taover/repository/exception/NotFoundException.java | 6 +++--- src/main/java/com/taover/repository/exception/SqlParsePagerException.java | 6 +++--- src/test/java/com/taover/repository/test/TestMapper.java | 11 ++++++++++- src/test/java/com/taover/repository/test/repository/CommonRegionEntity.java | 2 +- 7 files changed, 64 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 9b1140a..2a2b024 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ uploadArchives { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) } pom.project { - version '2.3.2' + version '2.3.4' 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 0911e1b..03960f4 100644 --- a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java +++ b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenant.java @@ -555,6 +555,43 @@ public class CustomJdbcTemplateWrapperTenant implements Cu list.add(id); return _jdbcTemplateWrapperTenant.update(updateSql, shardingKey, list.toArray()); } + + @Override + public void updateEntityByIdList(List changeList, List idList, 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"); + } + + StringBuffer sql = new StringBuffer("UPDATE "+this.getTableSql()+" SET"); + StringBuffer pql = new StringBuffer(sql.toString()); + List list = new ArrayList(); + this.appendSetSql(sql, pql, list, changeList); + String updateAndFromSql = sql.substring(0, sql.length()-1); + + int idIndex = 0; + int idListSize = idList.size(); + StringBuffer idSb = new StringBuffer(); + while(idIndex < idListSize) { + idSb.append(idList.get(idIndex)+","); + ++idIndex; + + //满100条则向mysql发送更新请求 + if(idIndex%100 == 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); + } + } + + //是否剩余id列表 + if(idSb.length() > 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()); + } + } @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 d482db2..bf31312 100644 --- a/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java +++ b/src/main/java/com/taover/repository/CustomJdbcTemplateWrapperTenantInterface.java @@ -115,6 +115,15 @@ public interface CustomJdbcTemplateWrapperTenantInterface * 根据ID修改指定的值 */ public int updateEntityById(List changeList, ID id, Long tenantId); + + /** + * 根据ID列表修改指定数据 + * @param changeList + * @param idList + * @param tenantId + * @return + */ + public void updateEntityByIdList(List changeList, List idList, Long tenantId); /** * List updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。 diff --git a/src/main/java/com/taover/repository/exception/NotFoundException.java b/src/main/java/com/taover/repository/exception/NotFoundException.java index ee2f2fd..5681fdb 100644 --- a/src/main/java/com/taover/repository/exception/NotFoundException.java +++ b/src/main/java/com/taover/repository/exception/NotFoundException.java @@ -1,11 +1,11 @@ package com.taover.repository.exception; public class NotFoundException extends Exception { - private Exception originError; - + private static final long serialVersionUID = 1L; + public NotFoundException() {} public NotFoundException(Exception e) { - this.originError = e; + super(e); } } diff --git a/src/main/java/com/taover/repository/exception/SqlParsePagerException.java b/src/main/java/com/taover/repository/exception/SqlParsePagerException.java index 394e93d..8f40b2b 100644 --- a/src/main/java/com/taover/repository/exception/SqlParsePagerException.java +++ b/src/main/java/com/taover/repository/exception/SqlParsePagerException.java @@ -1,10 +1,10 @@ package com.taover.repository.exception; public class SqlParsePagerException extends RuntimeException{ - private String msg = null; - + private static final long serialVersionUID = 1L; + public SqlParsePagerException(String msg) { - this.msg = msg; + super(msg); } } diff --git a/src/test/java/com/taover/repository/test/TestMapper.java b/src/test/java/com/taover/repository/test/TestMapper.java index 0817ea0..010dfee 100644 --- a/src/test/java/com/taover/repository/test/TestMapper.java +++ b/src/test/java/com/taover/repository/test/TestMapper.java @@ -1,5 +1,7 @@ package com.taover.repository.test; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import javax.sql.DataSource; @@ -25,7 +27,14 @@ public class TestMapper { JdbcTemplateWrapperTenant template = new JdbcTemplateWrapperTenantImpl(new JdbcTemplate(ds)); //System.out.println(template.queryForObject("select count(*) from wxorder_order", Integer.class)); CommonRegionRepository repo = new CommonRegionRepository(template); - System.out.println(repo.findListBySql("1=1", 1L)); + //System.out.println(repo.findListBySql("1=1", 1L)); + List changeList = new ArrayList(); + changeList.add(new Object[] {"large_area", "1"}); + List data = new ArrayList(); + data.add(12L); + data.add(14L); + data.add(33L); + repo.updateEntityByIdList(changeList, data, null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/src/test/java/com/taover/repository/test/repository/CommonRegionEntity.java b/src/test/java/com/taover/repository/test/repository/CommonRegionEntity.java index 59533b3..d712199 100644 --- a/src/test/java/com/taover/repository/test/repository/CommonRegionEntity.java +++ b/src/test/java/com/taover/repository/test/repository/CommonRegionEntity.java @@ -16,7 +16,7 @@ import com.taover.repository.annotation.TableShardingType; */ @Entity @Table(name="common_region", catalog="") -@TableSharding(type=TableShardingType.MULTI_DB_MULTI_TABLE, column="id") +//@TableSharding(type=TableShardingType.MULTI_DB_MULTI_TABLE, column="id") public class CommonRegionEntity implements Serializable { private static final long serialVersionUID = 1L; -- libgit2 0.21.2