Browse Source

test(h2-performance): 准备进行 h2 的性能插入测试

hcl 5 năm trước cách đây
mục cha
commit
f0d9ac8469

+ 7 - 7
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjectHandler.java

@@ -35,13 +35,13 @@ public class H2MetaObjectHandler implements MetaObjectHandler {
      */
     @Override
     public void insertFill(MetaObject metaObject) {
-        System.out.println("*************************");
-        System.out.println("insert fill");
-        System.out.println("*************************");
+        // System.out.println("*************************");
+        // System.out.println("insert fill");
+        // System.out.println("*************************");
 
         // 测试下划线
         Object testType = this.getFieldValByName("testType", metaObject);
-        System.out.println("testType=" + testType);
+        // System.out.println("testType=" + testType);
         if (testType == null) {
             //测试实体没有的字段,配置在公共填充,不应该set到实体里面
             this.setInsertFieldValByName("testType1", 3, metaObject);
@@ -51,9 +51,9 @@ public class H2MetaObjectHandler implements MetaObjectHandler {
 
     @Override
     public void updateFill(MetaObject metaObject) {
-        System.out.println("*************************");
-        System.out.println("update fill");
-        System.out.println("*************************");
+        // System.out.println("*************************");
+        // System.out.println("update fill");
+        // System.out.println("*************************");
         //测试实体没有的字段,配置在公共填充,不应该set到实体里面
         this.setUpdateFieldValByName("lastUpdatedDt1", new Timestamp(System.currentTimeMillis()), metaObject);
         this.setUpdateFieldValByName("lastUpdatedDt", new Timestamp(System.currentTimeMillis()), metaObject);

+ 44 - 7
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -324,10 +324,10 @@ class H2UserTest extends BaseTest {
         Assertions.assertNotEquals(0L, userService.lambdaQuery().like(H2User::getName, "a").count().longValue());
 
         List<H2User> users = userService.lambdaQuery().like(H2User::getName, "T")
-            .ne(H2User::getAge, AgeEnum.TWO)
-            .ge(H2User::getVersion, 1)
-            .isNull(H2User::getPrice)
-            .list();
+                .ne(H2User::getAge, AgeEnum.TWO)
+                .ge(H2User::getVersion, 1)
+                .isNull(H2User::getPrice)
+                .list();
         Assertions.assertTrue(users.isEmpty());
     }
 
@@ -346,8 +346,8 @@ class H2UserTest extends BaseTest {
     void testSaveBatchException() {
         try {
             userService.saveBatch(Arrays.asList(
-                new H2User(1L, "tom"),
-                new H2User(1L, "andy")
+                    new H2User(1L, "tom"),
+                    new H2User(1L, "andy")
             ));
         } catch (Exception e) {
             Assertions.assertTrue(e instanceof PersistenceException);
@@ -367,7 +367,7 @@ class H2UserTest extends BaseTest {
     }
 
     @Test
-    public void myQueryWithGroupByOrderBy(){
+    public void myQueryWithGroupByOrderBy() {
         userService.mySelectMaps().forEach(System.out::println);
     }
 
@@ -387,4 +387,41 @@ class H2UserTest extends BaseTest {
         final Select select3 = (Select) CCJSqlParserUtil.parse(targetSql3);
         Assertions.assertEquals(select3.toString(), targetSql3);
     }
+
+    /**
+     * CTO 说批量插入性能不行,让我们来分析一下问题在哪里
+     */
+    @Test
+    void batchInsertPerformanceTest() {
+        List<H2User> users = mockUser(10_000, 99989);
+        userService.saveBatch(users);
+        // 卧槽,速度挺快的
+    }
+
+    /**
+     * 模拟一群人
+     *
+     * @param size     这群人的数量
+     * @param cardinal 这群人 id 的起始值
+     * @return 返回模拟的一群人
+     */
+    private List<H2User> mockUser(int size, long cardinal) {
+        return new AbstractList<H2User>() {
+
+            @Override
+            public H2User get(int index) {
+                long id = cardinal + index + 1;
+                H2User h2User = new H2User(id, Long.toHexString(id));
+                h2User.setVersion(0);
+                h2User.setPrice(BigDecimal.ZERO);
+                return h2User;
+            }
+
+            @Override
+            public int size() {
+                return size;
+            }
+        };
+    }
+
 }

+ 1 - 1
mybatis-plus/src/test/resources/logback.xml

@@ -7,7 +7,7 @@
         </encoder>
     </appender>
 
-    <logger name="com.baomidou.mybatisplus.test" level="DEBUG" additivity="false">
+    <logger name="com.baomidou.mybatisplus.test" level="warn" additivity="false">
         <appender-ref ref="STDOUT"/>
     </logger>