From 874c575dae9d906d22814ee7a1021dcdb2247dd5 Mon Sep 17 00:00:00 2001 From: xgc Date: Tue, 4 Jun 2024 00:58:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/conditions/LambdaInsertWrapper.java | 11 ++--- .../core/conditions/LambdaUpdateWrapper.java | 20 +++++---- .../plus/core/mapper/BaseMilvusMapper.java | 42 ++++++++++++++++--- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaInsertWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaInsertWrapper.java index a5e2a77..ee82592 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaInsertWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaInsertWrapper.java @@ -14,10 +14,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 构建器内部类,用于构建insert请求 @@ -87,10 +84,11 @@ public class LambdaInsertWrapper extends AbstractChainWrapper implements return resp; } - public MilvusResp insert(T ...t) throws MilvusException { + public MilvusResp insert(Iterator iterator) throws MilvusException { PropertyCache propertyCache = conversionCache.getPropertyCache(); List jsonObjects=new ArrayList<>(); - for (T t1 : t) { + while (iterator.hasNext()) { + T t1 = iterator.next(); Map propertiesMap = getPropertiesMap(t1); JSONObject jsonObject=new JSONObject(); for (Map.Entry entry : propertiesMap.entrySet()) { @@ -100,7 +98,6 @@ public class LambdaInsertWrapper extends AbstractChainWrapper implements jsonObject.put(tk,value); } jsonObjects.add(jsonObject); - } return insert(jsonObjects); } diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java index c877d4a..9e5bc9b 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaUpdateWrapper.java @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -404,26 +405,29 @@ public class LambdaUpdateWrapper extends AbstractChainWrapper implements return resp; } - public MilvusResp updateById(T ...t) throws MilvusException { + public MilvusResp updateById(Iterator iterator) throws MilvusException { PropertyCache propertyCache = conversionCache.getPropertyCache(); String pk = CollectionToPrimaryCache.collectionToPrimary.get(collectionName); - List jsonObjects=new ArrayList<>(); - for (T t1 : t) { + List jsonObjects = new ArrayList<>(); + // 使用迭代器遍历可变参数 + while (iterator.hasNext()) { + T t1 = iterator.next(); Map propertiesMap = getPropertiesMap(t1); - JSONObject jsonObject=new JSONObject(); + JSONObject jsonObject = new JSONObject(); for (Map.Entry entry : propertiesMap.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); + // 根据PropertyCache转换属性名 String tk = propertyCache.functionToPropertyMap.get(key); - jsonObject.put(tk,value); + jsonObject.put(tk, value); } + // 检查是否包含主键 if (!jsonObject.containsKey(pk)) { - throw new MilvusException("not find primary key",400); + throw new MilvusException("not find primary key", 400); } jsonObjects.add(jsonObject); - } - return update(jsonObjects); + return update(jsonObjects); } @Override diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/mapper/BaseMilvusMapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/mapper/BaseMilvusMapper.java index 2598888..e795666 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/mapper/BaseMilvusMapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/mapper/BaseMilvusMapper.java @@ -15,7 +15,10 @@ import org.dromara.milvus.plus.model.vo.MilvusResult; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.Collection; +import java.util.Iterator; import java.util.List; +import java.util.NoSuchElementException; /** * @author xgc @@ -58,6 +61,25 @@ public abstract class BaseMilvusMapper{ public LambdaInsertWrapper insertWrapper() { return lambda(new LambdaInsertWrapper<>()); } + private static class ArrayIterator implements Iterator { + private final T[] array; + private int index = 0; + + public ArrayIterator(T[] array) { + this.array = array; + } + + @Override + public boolean hasNext() { + return index < array.length; + } + + @Override + public T next() { + if (!hasNext()) throw new NoSuchElementException(); + return array[index++]; + } + } public MilvusResp>> getById(Serializable ... ids) { @@ -68,15 +90,25 @@ public abstract class BaseMilvusMapper{ LambdaDeleteWrapper lambda = deleteWrapper(); return lambda.removeById(ids); } - public MilvusResp updateById(T ... entity){ - LambdaUpdateWrapper lambda = updateWrapper(); - return lambda.updateById(entity); - } public MilvusResp insert(T ... entity){ LambdaInsertWrapper lambda = insertWrapper(); - return lambda.insert(entity); + Iterator iterator = new ArrayIterator<>(entity); + return lambda.insert(iterator); + } + public MilvusResp insert(Collection entity){ + LambdaInsertWrapper lambda = insertWrapper(); + return lambda.insert(entity.iterator()); } + public MilvusResp updateById(T... entity) { + LambdaUpdateWrapper lambda = updateWrapper(); + Iterator iterator = new ArrayIterator<>(entity); + return lambda.updateById(iterator); + } + public MilvusResp updateById(Collection entity) { + LambdaUpdateWrapper lambda = updateWrapper(); + return lambda.updateById(entity.iterator()); + } /** * 创建通用构建器实例