From 9eb8e2da4f65e269b8ba6b2ecefef7ccb1b83021 Mon Sep 17 00:00:00 2001
From: Suomm <1474983351@qq.com>
Date: Sun, 11 Jun 2023 16:54:44 +0800
Subject: [PATCH] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=20fastjson=20?=
=?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E6=B5=8B=E8=AF=95=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mybatis-flex-spring-boot-test/pom.xml | 6 ++++
.../mybatisflex/test/common/CloneTest.java | 31 ++++++++++++++-----
.../mybatisflex/test/common/SerialUtil.java | 20 ++++++++++++
3 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/pom.xml b/mybatis-flex-test/mybatis-flex-spring-boot-test/pom.xml
index e22dd90b..32b67e43 100644
--- a/mybatis-flex-test/mybatis-flex-spring-boot-test/pom.xml
+++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/pom.xml
@@ -29,6 +29,12 @@
spring-boot-starter-web
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.32
+
+
diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/CloneTest.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/CloneTest.java
index 9a06c427..4a59fe0b 100644
--- a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/CloneTest.java
+++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/CloneTest.java
@@ -16,6 +16,8 @@
package com.mybatisflex.test.common;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONWriter;
import com.mybatisflex.core.query.QueryWrapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -23,7 +25,7 @@ import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.function.Supplier;
-import static com.mybatisflex.core.query.QueryMethods.case_;
+import static com.mybatisflex.core.query.QueryMethods.count;
import static com.mybatisflex.core.query.QueryMethods.distinct;
import static com.mybatisflex.test.model.table.RoleTableDef.ROLE;
import static com.mybatisflex.test.model.table.UserRoleTableDef.USER_ROLE;
@@ -35,18 +37,27 @@ import static com.mybatisflex.test.model.table.UserTableDef.USER;
*/
class CloneTest {
+ @Test
+ void test03() {
+ String jsonString = JSON.toJSONString(newQueryWrapper(), JSONWriter.Feature.FieldBased, JSONWriter.Feature.ReferenceDetection);
+ System.out.println(jsonString);
+ }
+
@Test
void test() {
QueryWrapper queryWrapper = newQueryWrapper();
+ Class queryWrapperClass = QueryWrapper.class;
int count = 10000;
/*
- * new: 50 ms
- * clone: 68 ms
- * serial: 2634 ms
+ * new: 41ms
+ * clone: 65ms
+ * fastjson: 620ms
+ * serial: 2003ms
*/
calcTime(count, "new", this::newQueryWrapper);
calcTime(count, "clone", queryWrapper::clone);
+ calcTime(count, "fastjson", () -> SerialUtil.cloneObject(queryWrapper, queryWrapperClass));
calcTime(count, "serial", () -> SerialUtil.cloneObject(queryWrapper));
}
@@ -55,12 +66,16 @@ class CloneTest {
QueryWrapper queryWrapper = newQueryWrapper();
QueryWrapper queryWrapper1 = queryWrapper.clone();
QueryWrapper queryWrapper2 = SerialUtil.cloneObject(queryWrapper);
+ QueryWrapper queryWrapper3 = SerialUtil.cloneObject(queryWrapper, QueryWrapper.class);
+ System.err.println(SerialUtil.toJSONString(queryWrapper));
System.out.println(queryWrapper.toSQL());
System.out.println(queryWrapper1.toSQL());
System.out.println(queryWrapper2.toSQL());
+ System.out.println(queryWrapper3.toSQL());
- Assertions.assertEquals(queryWrapper.toSQL(),queryWrapper1.toSQL());
- Assertions.assertEquals(queryWrapper.toSQL(),queryWrapper2.toSQL());
+ Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper1.toSQL());
+ Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper2.toSQL());
+ Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper3.toSQL());
}
private void calcTime(int count, String type, Supplier supplier) {
@@ -74,13 +89,13 @@ class CloneTest {
private QueryWrapper newQueryWrapper() {
return QueryWrapper.create()
- .select(case_()
+ .select(count(distinct(USER.USER_ID))/*case_()
.when(USER.USER_ID.eq(3)).then("x3")
.when(USER.USER_ID.eq(5)).then("x4")
.end(),
distinct(USER.USER_ID.add(4)),
USER.USER_NAME,
- ROLE.ALL_COLUMNS)
+ ROLE.ALL_COLUMNS*/)
.from(USER.as("u"))
.leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID))
.leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID))
diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/SerialUtil.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/SerialUtil.java
index 7859baf3..3eb135ed 100644
--- a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/SerialUtil.java
+++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/SerialUtil.java
@@ -16,6 +16,10 @@
package com.mybatisflex.test.common;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONReader;
+import com.alibaba.fastjson2.JSONWriter;
+
import java.io.*;
/**
@@ -51,4 +55,20 @@ public class SerialUtil {
return (T) readObject(writeObject(obj));
}
+ public static String toJSONString(Object obj) {
+ return JSON.toJSONString(obj, JSONWriter.Feature.FieldBased,
+ JSONWriter.Feature.WriteClassName,
+ JSONWriter.Feature.NotWriteRootClassName,
+ JSONWriter.Feature.ReferenceDetection);
+ }
+
+ public static T parseObject(String str, Class tClass) {
+ return JSON.parseObject(str, tClass, JSONReader.Feature.FieldBased,
+ JSONReader.Feature.SupportClassForName);
+ }
+
+ public static T cloneObject(Object obj, Class tClass) {
+ return parseObject(toJSONString(obj), tClass);
+ }
+
}
\ No newline at end of file