浏览代码

test: 增加批量testSaveOrUpdateBatchTransactional,testSaveBatch,testUpdateBatch,testSaveOrUpdateBatch.
fix: saveOrUpdateBatch创建sqlSession问题.

聂秋秋 6 年之前
父节点
当前提交
f4aa6fd259

+ 3 - 8
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java

@@ -185,14 +185,9 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         if (CollectionUtils.isEmpty(entityList)) {
         if (CollectionUtils.isEmpty(entityList)) {
             throw new IllegalArgumentException("Error: entityList must not be empty");
             throw new IllegalArgumentException("Error: entityList must not be empty");
         }
         }
-        SqlSession batchSqlSession = sqlSessionBatch();
-        try {
-            for (T anEntityList : entityList) {
-                saveOrUpdate(anEntityList);
-            }
-            batchSqlSession.flushStatements();
-        }finally {
-            closeSqlSession(batchSqlSession);
+        //todo 这里需要处理下,应该区分两个集合,分别执行insert和update操作,而不是直接调用saveOrUpdate
+        for (T anEntityList : entityList) {
+            saveOrUpdate(anEntityList);
         }
         }
         return true;
         return true;
     }
     }

+ 30 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -2,6 +2,7 @@ package com.baomidou.mybatisplus.test.h2;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -282,4 +283,33 @@ public class H2UserTest extends BaseTest {
             Assert.assertTrue(CollectionUtils.isEmpty(list));
             Assert.assertTrue(CollectionUtils.isEmpty(list));
         }
         }
     }
     }
+    
+    @Test
+    public void testSaveOrUpdateBatchTransactional(){
+        try {
+            userService.testSaveOrUpdateBatchTransactional();
+        }catch (MybatisPlusException e){
+            List<H2User> list = userService.list(new QueryWrapper<H2User>().like("name", "savOrUpdate"));
+            Assert.assertTrue(CollectionUtils.isEmpty(list));
+        }
+    }
+    
+    @Test
+    public void testSaveBatch(){
+        Assert.assertTrue(userService.saveBatch(Arrays.asList(new H2User("saveBatch1"),new H2User("saveBatch2"),new H2User("saveBatch3"),new H2User("saveBatch4"))));
+        Assert.assertTrue(userService.saveBatch(Arrays.asList(new H2User("saveBatch5"),new H2User("saveBatch6"),new H2User("saveBatch7"),new H2User("saveBatch8")),2));
+        
+    }
+    
+    @Test
+    public void testUpdateBatch(){
+        Assert.assertTrue(userService.updateBatchById(Arrays.asList(new H2User(1010L,"batch1010"),new H2User(1011L,"batch1011"),new H2User(1010L,"batch1010"),new H2User(1012L,"batch1012"))));
+        Assert.assertTrue(userService.updateBatchById(Arrays.asList(new H2User(1010L,"batch1010A"),new H2User(1011L,"batch1011A"),new H2User(1010L,"batch1010"),new H2User(1012L,"batch1012")),1));
+    }
+    
+    @Test
+    public void testSaveOrUpdateBatch(){
+        Assert.assertTrue(userService.saveOrUpdateBatch(Arrays.asList(new H2User(1010L,"batch1010"),new H2User(1011L,"batch1011"),new H2User(1010L,"batch1010"),new H2User(1015L,"batch1015"))));
+        Assert.assertTrue(userService.saveOrUpdateBatch(Arrays.asList(new H2User(1010L,"batch1010A"),new H2User(1011L,"batch1011A"),new H2User(1010L,"batch1010"),new H2User(1016L,"batch1016")),1));
+    }
 }
 }

+ 2 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/IH2UserService.java

@@ -51,4 +51,6 @@ public interface IH2UserService extends IService<H2User> {
     void testBatchTransactional();
     void testBatchTransactional();
     
     
     void testSimpleTransactional();
     void testSimpleTransactional();
+    
+    void testSaveOrUpdateBatchTransactional();
 }
 }

+ 9 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/impl/H2UserServiceImpl.java

@@ -107,4 +107,13 @@ public class H2UserServiceImpl extends ServiceImpl<H2UserMapper, H2User> impleme
         save(new H2User("simple2",0));
         save(new H2User("simple2",0));
         throw new MybatisPlusException("测试普通插入事务回滚");
         throw new MybatisPlusException("测试普通插入事务回滚");
     }
     }
+    
+    
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void testSaveOrUpdateBatchTransactional() {
+        saveOrUpdateBatch(Arrays.asList(new H2User("savOrUpdate1"),new H2User("savOrUpdate2"),new H2User("savOrUpdate3")),1);
+        saveOrUpdateBatch(Arrays.asList(new H2User("savOrUpdate4"),new H2User("savOrUpdate5"),new H2User("savOrUpdate6")),1);
+        throw new MybatisPlusException("测试普通插入事务回滚");
+    }
 }
 }

+ 3 - 0
mybatis-plus/src/test/resources/h2/user.insert.sql

@@ -3,3 +3,6 @@ insert into h2user (test_id, name, test_date, age, price, test_type, version, de
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (103, 'Bob', '2017-4-1 1:1:1', 1, 99.99, 3, 3, 0);
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (103, 'Bob', '2017-4-1 1:1:1', 1, 99.99, 3, 3, 0);
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (104, 'Joe', '2017-2-1 1:1:1', 1, 1.99, 1, 4, 0);
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (104, 'Joe', '2017-2-1 1:1:1', 1, 1.99, 1, 4, 0);
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (105, 'Tony', '2017-2-1 1:1:1', 3, 1.99, 1, 5, 0);
 insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (105, 'Tony', '2017-2-1 1:1:1', 3, 1.99, 1, 5, 0);
+insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (1010, '1010', '2017-2-1 1:1:1', 3, 1.99, 1, 5, 0);
+insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (1011, '1011', '2017-2-1 1:1:1', 3, 1.99, 1, 5, 0);
+insert into h2user (test_id, name, test_date, age, price, test_type, version, deleted)values (1012, '1012', '2017-2-1 1:1:1', 3, 1.99, 1, 5, 0);