فهرست منبع

是不是可以这么优化一下

= 8 سال پیش
والد
کامیت
e783e5e1f8

+ 15 - 6
mybatis-plus/src/main/java/com/baomidou/mybatisplus/service/impl/ServiceImpl.java

@@ -122,7 +122,8 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         if (CollectionUtils.isEmpty(entityList)) {
             throw new IllegalArgumentException("Error: entityList must not be empty");
         }
-        try (SqlSession batchSqlSession = sqlSessionBatch()) {
+        SqlSession batchSqlSession = sqlSessionBatch();
+        try {
             int size = entityList.size();
             String sqlStatement = sqlStatement(SqlMethod.INSERT_ONE);
             for (int i = 0; i < size; i++) {
@@ -132,8 +133,10 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                 }
             }
             batchSqlSession.flushStatements();
-        } catch (Exception e) {
+            batchSqlSession.commit();
+        } catch (Throwable e) {
             logger.error("Error: Cannot execute insertBatch Method. Cause:" + e);
+            batchSqlSession.rollback();
             return false;
         }
         return true;
@@ -180,7 +183,8 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         if (CollectionUtils.isEmpty(entityList)) {
             throw new IllegalArgumentException("Error: entityList must not be empty");
         }
-        try (SqlSession batchSqlSession = sqlSessionBatch()) {
+        SqlSession batchSqlSession = sqlSessionBatch();
+        try {
             int size = entityList.size();
             for (int i = 0; i < size; i++) {
                 insertOrUpdate(entityList.get(i));
@@ -189,8 +193,10 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                 }
             }
             batchSqlSession.flushStatements();
-        } catch (Exception e) {
+            batchSqlSession.commit();
+        } catch (Throwable e) {
             logger.error("Error: Cannot execute insertOrUpdateBatch Method. Cause:" + e);
+            batchSqlSession.rollback();
             return false;
         }
         return true;
@@ -244,7 +250,8 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         if (CollectionUtils.isEmpty(entityList)) {
             throw new IllegalArgumentException("Error: entityList must not be empty");
         }
-        try (SqlSession batchSqlSession = sqlSessionBatch()) {
+        SqlSession batchSqlSession = sqlSessionBatch();
+        try {
             int size = entityList.size();
             String sqlStatement = sqlStatement(SqlMethod.UPDATE_BY_ID);
             for (int i = 0; i < size; i++) {
@@ -256,8 +263,10 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                 }
             }
             batchSqlSession.flushStatements();
-        } catch (Exception e) {
+            batchSqlSession.commit();
+        } catch (Throwable e) {
             logger.error("Error: Cannot execute insertBatch Method. Cause:" + e);
+            batchSqlSession.rollback();
             return false;
         }
         return true;

+ 48 - 31
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -7,6 +7,7 @@ import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -100,6 +101,21 @@ public class H2UserTest {
         Assert.assertEquals("Caratacus", userFromDB.getDesc());
     }
 
+
+    @Test
+    public void testInsertBatch() {
+        userService.insert(new H2User("sanmao", 1));
+        List<H2User> h2Users = new ArrayList<>();
+        for (int i=0;i<10;i++) {
+            H2User user = new H2User();
+            user.setAge(1);
+            user.setPrice(new BigDecimal("6" + i));
+            user.setDesc("testBatch" + i);
+            h2Users.add(user);
+        }
+        Assert.assertTrue(userService.insertBatch(h2Users));
+    }
+
     @Test
     public void testDelete() {
         H2User user = new H2User();
@@ -143,7 +159,7 @@ public class H2UserTest {
     }
 
     @Test
-    public void testUpdateByIdOptLock(){
+    public void testUpdateByIdOptLock() {
         Long id = 991L;
         H2User user = new H2User();
         user.setId(id);
@@ -167,7 +183,7 @@ public class H2UserTest {
     }
 
     @Test
-    public void testUpdateAllColumnByIdOptLock(){
+    public void testUpdateAllColumnByIdOptLock() {
         Long id = 997L;
         H2User user = new H2User();
         user.setId(id);
@@ -198,7 +214,7 @@ public class H2UserTest {
     }
 
     @Test
-    public void testUpdateByEntityWrapperOptLock(){
+    public void testUpdateByEntityWrapperOptLock() {
         Long id = 992L;
         H2User user = new H2User();
         user.setId(id);
@@ -224,7 +240,7 @@ public class H2UserTest {
     }
 
     @Test
-    public void testUpdateByEntityWrapperOptLockWithoutVersionVal(){
+    public void testUpdateByEntityWrapperOptLockWithoutVersionVal() {
         Long id = 993L;
         H2User user = new H2User();
         user.setId(id);
@@ -250,7 +266,7 @@ public class H2UserTest {
     }
 
     @Test
-    public void testUpdateByEntityWrapperNoEntity(){
+    public void testUpdateByEntityWrapperNoEntity() {
         Long id = 998L;
         H2User user = new H2User();
         user.setId(id);
@@ -271,13 +287,13 @@ public class H2UserTest {
         userDB = userService.selectById(id);
         Assert.assertEquals(1, userDB.getVersion().intValue());
         EntityWrapper<H2User> param = new EntityWrapper<>();
-        param.eq("name","998");
+        param.eq("name", "998");
         List<H2User> userList = userService.selectList(param);
-        Assert.assertTrue(userList.size()>1);
+        Assert.assertTrue(userList.size() > 1);
     }
 
     @Test
-    public void testUpdateByEntityWrapperNull(){
+    public void testUpdateByEntityWrapperNull() {
         Long id = 918L;
         H2User user = new H2User();
         user.setId(id);
@@ -294,76 +310,77 @@ public class H2UserTest {
         H2User updateUser = new H2User();
         updateUser.setName("918");
         updateUser.setVersion(1);
-        Assert.assertTrue(userService.update(updateUser,null));
+        Assert.assertTrue(userService.update(updateUser, null));
         EntityWrapper<H2User> ew = new EntityWrapper<>();
         int count1 = userService.selectCount(ew);
-        ew.eq("name","918").eq("version",1);
+        ew.eq("name", "918").eq("version", 1);
         int count2 = userService.selectCount(ew);
         List<H2User> userList = userService.selectList(new EntityWrapper<H2User>());
-        for(H2User u:userList){
+        for (H2User u : userList) {
             System.out.println(u);
         }
-        System.out.println("count1="+count1+", count2="+count2);
-        Assert.assertTrue(count2>0);
-        Assert.assertEquals(count1,count2);
+        System.out.println("count1=" + count1 + ", count2=" + count2);
+        Assert.assertTrue(count2 > 0);
+        Assert.assertEquals(count1, count2);
     }
 
     @Test
-    public void testUpdateBatch(){
+    public void testUpdateBatch() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
         Map<Long, Integer> userVersionMap = new HashMap<>();
-        for(H2User u:list){
-            userVersionMap.put(u.getId(),u.getVersion());
+        for (H2User u : list) {
+            userVersionMap.put(u.getId(), u.getVersion());
         }
 
         Assert.assertTrue(userService.updateBatchById(list));
         list = userService.selectList(new EntityWrapper<H2User>());
-        for(H2User user:list){
-            Assert.assertEquals(userVersionMap.get(user.getId())+1, user.getVersion().intValue());
+        for (H2User user : list) {
+            Assert.assertEquals(userVersionMap.get(user.getId()) + 1, user.getVersion().intValue());
         }
 
     }
 
     @Test
-    public void testUpdateInLoop(){
+    public void testUpdateInLoop() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
-        Map<Long,Integer> versionBefore = new HashMap<>();
-        Map<Long,String> nameExpect = new HashMap<>();
+        Map<Long, Integer> versionBefore = new HashMap<>();
+        Map<Long, String> nameExpect = new HashMap<>();
         for (H2User h2User : list) {
             Long id = h2User.getId();
             Integer versionVal = h2User.getVersion();
             versionBefore.put(id, versionVal);
-            String randomName = h2User.getName()+"_"+new Random().nextInt(10);
+            String randomName = h2User.getName() + "_" + new Random().nextInt(10);
             nameExpect.put(id, randomName);
             h2User.setName(randomName);
             userService.updateById(h2User);
         }
 
         list = userService.selectList(new EntityWrapper<H2User>());
-        for(H2User u:list){
+        for (H2User u : list) {
             Assert.assertEquals(u.getName(), nameExpect.get(u.getId()));
-            Assert.assertEquals(versionBefore.get(u.getId())+1, u.getVersion().intValue());
+            Assert.assertEquals(versionBefore.get(u.getId()) + 1, u.getVersion().intValue());
         }
     }
+
     @Test
-    public void testUpdateAllColumnInLoop(){
+    public void testUpdateAllColumnInLoop() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
-        Map<Long,Integer> versionBefore = new HashMap<>();
-        Map<Long,String> nameExpect = new HashMap<>();
+        Map<Long, Integer> versionBefore = new HashMap<>();
+        Map<Long, String> nameExpect = new HashMap<>();
         for (H2User h2User : list) {
             Long id = h2User.getId();
             Integer versionVal = h2User.getVersion();
             versionBefore.put(id, versionVal);
-            String randomName = h2User.getName()+"_"+new Random().nextInt(10);
+            String randomName = h2User.getName() + "_" + new Random().nextInt(10);
             nameExpect.put(id, randomName);
             h2User.setName(randomName);
             userService.updateAllColumnById(h2User);
         }
 
         list = userService.selectList(new EntityWrapper<H2User>());
-        for(H2User u:list){
+        for (H2User u : list) {
             Assert.assertEquals(u.getName(), nameExpect.get(u.getId()));
-            Assert.assertEquals(versionBefore.get(u.getId())+1, u.getVersion().intValue());
+            Assert.assertEquals(versionBefore.get(u.getId()) + 1, u.getVersion().intValue());
         }
     }