Skip to content

Commit 28fbbb0

Browse files
committed
Add apijson and mybatis-plus
1 parent f8f7681 commit 28fbbb0

11 files changed

+330
-83
lines changed

benchmark/build.gradle

-61
This file was deleted.

benchmark/build.gradle.kts

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
plugins {
2+
id("java")
3+
alias(libs.plugins.kotlin)
4+
alias(libs.plugins.ksp)
5+
alias(libs.plugins.springboot)
6+
alias(libs.plugins.spring.dependency.management)
7+
}
8+
9+
group = "org.babyfish.jimmer"
10+
version = "0.1.0"
11+
12+
repositories {
13+
mavenCentral()
14+
maven("https://jitpack.io")
15+
}
16+
17+
dependencies {
18+
19+
implementation(libs.jimmer.sql)
20+
annotationProcessor(libs.jimmer.apt)
21+
ksp(libs.jimmer.ksp)
22+
23+
implementation(libs.spring.boot.jdbc)
24+
implementation(libs.spring.boot.data.jpa)
25+
implementation(libs.spring.boot.data.jdbc)
26+
implementation(libs.eclipselink)
27+
implementation(libs.jooq)
28+
implementation(libs.mybatis)
29+
implementation(libs.mybatis.plus)
30+
implementation(libs.exposed.core)
31+
implementation(libs.exposed.dao)
32+
implementation(libs.exposed.jdbc)
33+
implementation(libs.ktorm)
34+
implementation(libs.objsql)
35+
implementation(libs.nutz)
36+
implementation(libs.easyquery)
37+
implementation(libs.apijson)
38+
implementation(libs.apijson.framework)
39+
implementation(libs.jmh.core)
40+
annotationProcessor(libs.jmh.generator.annprocess)
41+
42+
runtimeOnly(libs.h2)
43+
}
44+
45+
tasks.withType<JavaCompile> {
46+
options.compilerArgs.add("-Ajimmer.source.excludes=org.babyfish.jimmer.benchmark.jimmer.kt")
47+
}
48+
49+
ksp {
50+
arg("jimmer.source.excludes", "org.babyfish.jimmer.benchmark.jimmer.JimmerData")
51+
}
52+
53+
tasks.test {
54+
useJUnitPlatform()
55+
}

benchmark/gradle/libs.versions.toml

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
[versions]
2+
kotlin = "1.9.25"
3+
ksp = "1.9.25-1.0.20"
4+
springboot = "2.7.0"
5+
spring-dependency-management = "1.1.6"
6+
jimmer = "0.9.10"
7+
eclipselink = "3.78.0"
8+
jooq = "3.16.6"
9+
mybatis = "2.2.2"
10+
mybatis-plus = "3.5.9"
11+
exposed = "0.40.1"
12+
ktorm = "4.1.1"
13+
objsql = "1.3.4"
14+
nutz = "1.r.72"
15+
easyquery = "2.0.102"
16+
jmh = "1.37"
17+
h2 = "2.3.232"
18+
apijson = "6.3.0"
19+
20+
[libraries]
21+
spring-boot-jdbc = { module = "org.springframework.boot:spring-boot-starter-jdbc", version.ref = "springboot" }
22+
spring-boot-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa", version.ref = "springboot" }
23+
spring-boot-data-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "springboot" }
24+
jimmer-sql = { module = "org.babyfish.jimmer:jimmer-sql-kotlin", version.ref = "jimmer" }
25+
jimmer-apt = { module = "org.babyfish.jimmer:jimmer-apt", version.ref = "jimmer" }
26+
jimmer-ksp = { module = "org.babyfish.jimmer:jimmer-ksp", version.ref = "jimmer" }
27+
eclipselink = { module = "com.sap.cloud.sdk.frameworks:eclipselink", version.ref = "eclipselink" }
28+
jooq = { module = "org.jooq:jooq", version.ref = "jooq" }
29+
mybatis = { module = "org.mybatis.spring.boot:mybatis-spring-boot-starter", version.ref = "mybatis" }
30+
mybatis-plus = { module = "com.baomidou:mybatis-plus-boot-starter", version.ref = "mybatis-plus" }
31+
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
32+
exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" }
33+
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
34+
ktorm = { module = "org.ktorm:ktorm-core", version.ref = "ktorm" }
35+
objsql = { module = "com.github.braisdom:objsql-springboot", version.ref = "objsql" }
36+
nutz = { module = "org.nutz:nutz", version.ref = "nutz" }
37+
easyquery = { module = "com.easy-query:sql-h2", version.ref = "easyquery" }
38+
jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" }
39+
jmh-generator-annprocess = { module = "org.openjdk.jmh:jmh-generator-annprocess", version.ref = "jmh" }
40+
h2 = { module = "com.h2database:h2", version.ref = "h2" }
41+
apijson = { module = "com.github.Tencent:APIJSON", version.ref = "apijson" }
42+
apijson-framework = { module = "com.github.APIJSON:apijson-framework", version.ref = "apijson" }
43+
44+
[plugins]
45+
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
46+
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
47+
springboot = { id = "org.springframework.boot", version.ref = "springboot" }
48+
spring-dependency-management = { id = "io.spring.dependency-management", version.ref = "spring-dependency-management" }
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

benchmark/settings.gradle

-2
This file was deleted.

benchmark/settings.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rootProject.name = "benchmark"
2+

benchmark/src/main/java/org/babyfish/jimmer/benchmark/OrmBenchmark.java

+37-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.babyfish.jimmer.benchmark;
22

3+
import apijson.RequestMethod;
4+
import apijson.framework.APIJSONCreator;
5+
import apijson.orm.Parser;
36
import com.easy.query.core.api.client.EasyQueryClient;
47
import com.easy.query.core.bootstrapper.EasyQueryBootstrapper;
58
import com.easy.query.h2.config.H2DatabaseConfiguration;
@@ -12,11 +15,12 @@
1215
import org.babyfish.jimmer.benchmark.jooq.JooqData;
1316
import org.babyfish.jimmer.benchmark.jooq.JooqDataTable;
1417
import org.babyfish.jimmer.benchmark.ktorm.KtormDataTable;
18+
import org.babyfish.jimmer.benchmark.mybatis.MyBatisDataMapper;
19+
import org.babyfish.jimmer.benchmark.mybatis.plus.MyBatisPlusDataBaseMapper;
1520
import org.babyfish.jimmer.benchmark.nutz.NutzData;
1621
import org.babyfish.jimmer.benchmark.objsql.FakeObjSqlLoggerFactory;
1722
import org.babyfish.jimmer.benchmark.objsql.ObjSqlData;
1823
import org.babyfish.jimmer.benchmark.springjdbc.SpringJdbcDataRepository;
19-
import org.babyfish.jimmer.benchmark.mybatis.MyBatisDataMapper;
2024
import org.babyfish.jimmer.sql.JSqlClient;
2125
import org.babyfish.jimmer.sql.kt.KSqlClient;
2226
import org.jooq.DSLContext;
@@ -51,6 +55,8 @@ public class OrmBenchmark {
5155

5256
private MyBatisDataMapper myBatisDataMapper;
5357

58+
private MyBatisPlusDataBaseMapper myBatisPlusDataBaseMapper;
59+
5460
private EntityManagerFactory hibernateEntityManagerFactory;
5561

5662
private EntityManagerFactory eclipseLinkEntityManagerFactory;
@@ -67,6 +73,8 @@ public class OrmBenchmark {
6773
private EasyQueryTest easyQueryTest;
6874
private EasyQueryClient easyQueryClient;
6975

76+
private APIJSONCreator<Long> apijsonCreator;
77+
7078
@Setup
7179
public void initialize() throws SQLException, IOException {
7280
ApplicationContext ctx = SpringApplication.run(BenchmarkApplication.class);
@@ -76,6 +84,7 @@ public void initialize() throws SQLException, IOException {
7684
sqlClient = ctx.getBean(JSqlClient.class);
7785
kSqlClient = ctx.getBean(KSqlClient.class);
7886
myBatisDataMapper = ctx.getBean(MyBatisDataMapper.class);
87+
myBatisPlusDataBaseMapper = ctx.getBean(MyBatisPlusDataBaseMapper.class);
7988
hibernateEntityManagerFactory = ctx.getBean("hibernateEntityManagerFactory", EntityManagerFactory.class);
8089
eclipseLinkEntityManagerFactory = ctx.getBean("eclipseLinkEntityManagerFactory", EntityManagerFactory.class);
8190
dslContext = ctx.getBean(DSLContext.class);
@@ -86,15 +95,17 @@ public void initialize() throws SQLException, IOException {
8695
ExposedJavaHelperKt.connect(transactionAwareDataSource);
8796
nutDao = new NutDao(transactionAwareDataSource);
8897
jdbcDao = new JdbcDao(transactionAwareDataSource);
89-
easyQueryClient= EasyQueryBootstrapper.defaultBuilderConfiguration().setDefaultDataSource(ctx.getBean(DataSource.class))
90-
.optionConfigure(op->{
98+
easyQueryClient = EasyQueryBootstrapper.defaultBuilderConfiguration().setDefaultDataSource(ctx.getBean(DataSource.class))
99+
.optionConfigure(op -> {
91100
op.setPrintSql(false);
92101
})
93102
.useDatabaseConfigure(new H2DatabaseConfiguration())
94103
.build();
95-
easyQueryTest=new EasyQueryTest(easyQueryClient);
104+
easyQueryTest = new EasyQueryTest(easyQueryClient);
96105

97106
FakeObjSqlLoggerFactory.init();
107+
108+
apijsonCreator = ctx.getBean(APIJSONCreator.class);
98109
}
99110

100111
/*
@@ -139,6 +150,11 @@ public void runMyBatis() {
139150
myBatisDataMapper.findAll();
140151
}
141152

153+
@Benchmark
154+
public void runMyBatisPlus() {
155+
myBatisPlusDataBaseMapper.selectList(null);
156+
}
157+
142158
@Benchmark
143159
public void runJpaByHibernate() {
144160
/*
@@ -208,13 +224,28 @@ public void runJdbcByColumnIndex() throws SQLException {
208224
public void runJdbcByColumnName() throws SQLException {
209225
jdbcDao.findAllByColumnName();
210226
}
227+
211228
@Benchmark
212-
public void runEasyQuery(){
229+
public void runEasyQuery() {
213230
easyQueryTest.selectAll();
214231
}
215232

233+
@Benchmark
234+
public void runApiJson() {
235+
final Parser<Long> parser = apijsonCreator.createParser();
236+
parser.setNeedVerify(false);
237+
parser.setMethod(RequestMethod.GET);
238+
parser.parse("{\n" +
239+
" \"[]\": {\n" +
240+
" \"DATA\": {\n" +
241+
" \"@column\": \"ID,VALUE_1,VALUE_2,VALUE_3,VALUE_4,VALUE_5,VALUE_6,VALUE_7,VALUE_8,VALUE_9\"\n" +
242+
" }\n" +
243+
" }\n" +
244+
"}");
245+
}
246+
216247
@TearDown
217-
public void shutdown(){
248+
public void shutdown() {
218249
easyQueryClient.getRuntimeContext().getEasyTimeJobManager().shutdown();
219250
}
220251
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.babyfish.jimmer.benchmark.apijson;
2+
3+
import apijson.Log;
4+
import apijson.framework.APIJSONCreator;
5+
import apijson.framework.APIJSONParser;
6+
import apijson.framework.APIJSONSQLConfig;
7+
import apijson.framework.APIJSONSQLExecutor;
8+
import apijson.orm.SQLConfig;
9+
import apijson.orm.SQLExecutor;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
13+
import javax.sql.DataSource;
14+
import java.sql.Connection;
15+
16+
@Configuration
17+
public class ApiJsonConfig {
18+
@Bean
19+
public APIJSONCreator<Long> apiJsonParse(DataSource dataSource) {
20+
APIJSONCreator<Long> apijsonCreator = new APIJSONCreator<>() {
21+
@Override
22+
public SQLExecutor<Long> createSQLExecutor() {
23+
return new APIJSONSQLExecutor<>() {
24+
@Override
25+
public Connection getConnection(SQLConfig<Long> config) throws Exception {
26+
String key = config.getDatasource() + "-" + config.getDatabase();
27+
Connection c = connectionMap.get(key);
28+
if (c == null || c.isClosed()) {
29+
connectionMap.put(key, dataSource == null ? null : dataSource.getConnection());
30+
}
31+
return super.getConnection(config);
32+
}
33+
};
34+
}
35+
36+
@Override
37+
public SQLConfig<Long> createSQLConfig() {
38+
return new APIJSONSQLConfig<>() {
39+
@Override
40+
public String getSQLSchema() {
41+
return "";
42+
}
43+
44+
@Override
45+
public boolean limitSQLCount() {
46+
return false;
47+
}
48+
49+
@Override
50+
public String getLimitString() {
51+
return "";
52+
}
53+
};
54+
}
55+
};
56+
Log.DEBUG = false;
57+
APIJSONParser.APIJSON_CREATOR = apijsonCreator;
58+
APIJSONSQLConfig.APIJSON_CREATOR = apijsonCreator;
59+
return apijsonCreator;
60+
}
61+
}

benchmark/src/main/java/org/babyfish/jimmer/benchmark/jimmer/JimmerConfig.java

+1-13
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.springframework.jdbc.datasource.DataSourceUtils;
1010

1111
import javax.sql.DataSource;
12-
import java.sql.Connection;
13-
import java.util.function.Function;
1412

1513
@Configuration
1614
public class JimmerConfig {
@@ -23,17 +21,7 @@ public JSqlClient sqlClient(
2321
.newBuilder()
2422
.setDialect(new H2Dialect())
2523
.setEntityManager(new EntityManager(JimmerData.class))
26-
.setConnectionManager(new ConnectionManager() {
27-
@Override
28-
public <R> R execute(Function<Connection, R> block) {
29-
Connection con = DataSourceUtils.getConnection(dataSource);
30-
try {
31-
return block.apply(con);
32-
} finally {
33-
DataSourceUtils.releaseConnection(con, dataSource);
34-
}
35-
}
36-
})
24+
.setConnectionManager(ConnectionManager.singleConnectionManager(DataSourceUtils.getConnection(dataSource)))
3725
.build();
3826
}
3927
}

0 commit comments

Comments
 (0)