mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
test: 添加 fastjson 序列化测试。
This commit is contained in:
parent
1e603a0350
commit
9eb8e2da4f
@ -29,6 +29,12 @@
|
|||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.fastjson2</groupId>
|
||||||
|
<artifactId>fastjson2</artifactId>
|
||||||
|
<version>2.0.32</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||||
<!-- <artifactId>spring-boot-starter-jdbc</artifactId>-->
|
<!-- <artifactId>spring-boot-starter-jdbc</artifactId>-->
|
||||||
|
|||||||
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.mybatisflex.test.common;
|
package com.mybatisflex.test.common;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONWriter;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -23,7 +25,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.function.Supplier;
|
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.core.query.QueryMethods.distinct;
|
||||||
import static com.mybatisflex.test.model.table.RoleTableDef.ROLE;
|
import static com.mybatisflex.test.model.table.RoleTableDef.ROLE;
|
||||||
import static com.mybatisflex.test.model.table.UserRoleTableDef.USER_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 {
|
class CloneTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test03() {
|
||||||
|
String jsonString = JSON.toJSONString(newQueryWrapper(), JSONWriter.Feature.FieldBased, JSONWriter.Feature.ReferenceDetection);
|
||||||
|
System.out.println(jsonString);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void test() {
|
void test() {
|
||||||
QueryWrapper queryWrapper = newQueryWrapper();
|
QueryWrapper queryWrapper = newQueryWrapper();
|
||||||
|
Class<QueryWrapper> queryWrapperClass = QueryWrapper.class;
|
||||||
int count = 10000;
|
int count = 10000;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* new: 50 ms
|
* new: 41ms
|
||||||
* clone: 68 ms
|
* clone: 65ms
|
||||||
* serial: 2634 ms
|
* fastjson: 620ms
|
||||||
|
* serial: 2003ms
|
||||||
*/
|
*/
|
||||||
calcTime(count, "new", this::newQueryWrapper);
|
calcTime(count, "new", this::newQueryWrapper);
|
||||||
calcTime(count, "clone", queryWrapper::clone);
|
calcTime(count, "clone", queryWrapper::clone);
|
||||||
|
calcTime(count, "fastjson", () -> SerialUtil.cloneObject(queryWrapper, queryWrapperClass));
|
||||||
calcTime(count, "serial", () -> SerialUtil.cloneObject(queryWrapper));
|
calcTime(count, "serial", () -> SerialUtil.cloneObject(queryWrapper));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,12 +66,16 @@ class CloneTest {
|
|||||||
QueryWrapper queryWrapper = newQueryWrapper();
|
QueryWrapper queryWrapper = newQueryWrapper();
|
||||||
QueryWrapper queryWrapper1 = queryWrapper.clone();
|
QueryWrapper queryWrapper1 = queryWrapper.clone();
|
||||||
QueryWrapper queryWrapper2 = SerialUtil.cloneObject(queryWrapper);
|
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(queryWrapper.toSQL());
|
||||||
System.out.println(queryWrapper1.toSQL());
|
System.out.println(queryWrapper1.toSQL());
|
||||||
System.out.println(queryWrapper2.toSQL());
|
System.out.println(queryWrapper2.toSQL());
|
||||||
|
System.out.println(queryWrapper3.toSQL());
|
||||||
|
|
||||||
Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper1.toSQL());
|
Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper1.toSQL());
|
||||||
Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper2.toSQL());
|
Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper2.toSQL());
|
||||||
|
Assertions.assertEquals(queryWrapper.toSQL(), queryWrapper3.toSQL());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calcTime(int count, String type, Supplier<QueryWrapper> supplier) {
|
private void calcTime(int count, String type, Supplier<QueryWrapper> supplier) {
|
||||||
@ -74,13 +89,13 @@ class CloneTest {
|
|||||||
|
|
||||||
private QueryWrapper newQueryWrapper() {
|
private QueryWrapper newQueryWrapper() {
|
||||||
return QueryWrapper.create()
|
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(3)).then("x3")
|
||||||
.when(USER.USER_ID.eq(5)).then("x4")
|
.when(USER.USER_ID.eq(5)).then("x4")
|
||||||
.end(),
|
.end(),
|
||||||
distinct(USER.USER_ID.add(4)),
|
distinct(USER.USER_ID.add(4)),
|
||||||
USER.USER_NAME,
|
USER.USER_NAME,
|
||||||
ROLE.ALL_COLUMNS)
|
ROLE.ALL_COLUMNS*/)
|
||||||
.from(USER.as("u"))
|
.from(USER.as("u"))
|
||||||
.leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID))
|
.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))
|
.leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID))
|
||||||
|
|||||||
@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.mybatisflex.test.common;
|
package com.mybatisflex.test.common;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONReader;
|
||||||
|
import com.alibaba.fastjson2.JSONWriter;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,4 +55,20 @@ public class SerialUtil {
|
|||||||
return (T) readObject(writeObject(obj));
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user