From 545f0bd4b0b2f84fb54c165bc551aa08ca9c073e Mon Sep 17 00:00:00 2001
From: 抓蛙师 <770492966@qq.com>
Date: 星期三, 25 八月 2021 20:24:35 +0800
Subject: [PATCH] saveAll支持有id则更新和无id则插入

---
 ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java |   27 ++++++++++++++++++++++++++-
 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java            |    9 +++++++--
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java
index 90a1bd4..99441b5 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.common.core.mybatisplus.core;
 
 import cn.hutool.core.bean.copier.CopyOptions;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,6 +13,9 @@
 import org.springframework.core.ResolvableType;
 
 import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -118,7 +123,27 @@
 	 */
 	@Override
 	public boolean saveAll(Collection<T> entityList) {
-		return baseMapper.insertAll(entityList) == entityList.size();
+		ArrayList<T> list = new ArrayList<>();
+		for (T t : entityList) {
+			try {
+				//鑾峰彇灞炴�ф敞瑙g殑value鍊�
+				Field f = t.getClass().getDeclaredField("id");
+				f.setAccessible( true );//璁剧疆鍙互鑼冨洿private
+				Object o = f.get(t);//鑾峰彇鍑篿d鐨勫��
+				System.out.println(o);
+				if (o == null) {
+					//濡傛灉id涓簄ull,鎻掑叆
+					list.add(t);
+				} else {
+					//鍚﹀垯鏇存柊
+					baseMapper.updateById(t);
+				}
+
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return baseMapper.insertAll(list) == list.size();
 	}
 
 	/**
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
index f3a7f6d..db96797 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
@@ -39,8 +39,13 @@
 //	@DataSource(DataSourceType.SLAVE)
     public AjaxResult<Void> add() {
 		List<TestDemo> list = new ArrayList<>();
-		for (int i = 0; i < 1000; i++) {
-			list.add(new TestDemo().setOrderNum(-1L).setTestKey("鎵归噺鏂板").setValue("娴嬭瘯鏂板"));
+		for (int i = 0; i < 10; i++) {
+			TestDemo testDemo = new TestDemo();
+			if (i % 2 == 0) {
+				list.add(testDemo.setId((long) i + 1).setTestKey("鎵归噺鏇存柊").setValue("鎵归噺鏇存柊"));
+			} else {
+				list.add(testDemo.setOrderNum(-1L).setTestKey("鎵归噺鏂板").setValue("娴嬭瘯鏂板"));
+			}
 		}
         return toAjax(iTestDemoService.saveAll(list) ? 1 : 0);
     }

--
Gitblit v1.9.3