test: 添加 fastjson 序列化测试。

This commit is contained in:
Suomm 2023-06-11 16:54:44 +08:00
parent 1e603a0350
commit 9eb8e2da4f
3 changed files with 49 additions and 8 deletions

View File

@ -29,6 +29,12 @@
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.32</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-jdbc</artifactId>-->

View File

@ -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<QueryWrapper> 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<QueryWrapper> 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))

View File

@ -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> T parseObject(String str, Class<T> tClass) {
return JSON.parseObject(str, tClass, JSONReader.Feature.FieldBased,
JSONReader.Feature.SupportClassForName);
}
public static <T> T cloneObject(Object obj, Class<T> tClass) {
return parseObject(toJSONString(obj), tClass);
}
}