Skip to content

Commit 113eac2

Browse files
committed
Java:MultiDataSource 新增 SurrealDB Demo
1 parent 373b53f commit 113eac2

File tree

3 files changed

+103
-54
lines changed

3 files changed

+103
-54
lines changed

Diff for: APIJSON-Java-Server/APIJSONBoot-MultiDataSource/pom.xml

+10
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@
7777
<version>2.0.3</version>
7878
</dependency>
7979
<!-- <dependency>-->
80+
<!-- <groupId>com.surrealdb</groupId>-->
81+
<!-- <artifactId>surrealdb</artifactId>-->
82+
<!-- <version>0.2.0</version>-->
83+
<!-- </dependency>-->
84+
<!-- <dependency>-->
85+
<!-- <groupId>com.github.APIJSON</groupId>-->
86+
<!-- <artifactId>apijson-surrealdb</artifactId>-->
87+
<!-- <version>1.0.0</version>-->
88+
<!-- </dependency>-->
89+
<!-- <dependency>-->
8090
<!-- <groupId>org.duckdb</groupId>-->
8191
<!-- <artifactId>duckdb_jdbc</artifactId>-->
8292
<!-- <version>1.1.3</version>-->

Diff for: APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoSQLConfig.java

+80-50
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import apijson.orm.AbstractParser;
2929
import apijson.orm.AbstractSQLConfig;
3030
import apijson.orm.Parser;
31+
//import apijson.surrealdb.SurrealDBUtil;
3132
import com.alibaba.fastjson.annotation.JSONField;
3233

3334
import apijson.column.ColumnUtil;
@@ -54,7 +55,8 @@ public DemoSQLConfig(RequestMethod method, String table) {
5455

5556
static {
5657
DEFAULT_DATABASE = DATABASE_MYSQL; //TODO 默认数据库类型,改成你自己的。TiDB, MariaDB, OceanBase 这类兼容 MySQL 的可当做 MySQL 使用
57-
DEFAULT_SCHEMA = "sys"; // ""apijson"; //TODO 默认数据库名/模式,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: sys, SQL Server: dbo, Oracle:
58+
// DEFAULT_NAMESPACE = "root"; //TODO 默认数据库名/模式,改成你自己的,仅对 PostgreSQL: posgres, SurrealDB: root 等数据库有效
59+
DEFAULT_SCHEMA = "sys"; // "apijson"; //TODO 默认数据库名/模式,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: sys, SQL Server: dbo, Oracle:
5860

5961
// 表名和数据库不一致的,需要配置映射关系。只使用 APIJSONORM 时才需要;
6062
// 这个 Demo 用了 apijson-framework 且调用了 APIJSONApplication.init 则不需要
@@ -77,9 +79,10 @@ public AbstractSQLConfig getSQLConfig(RequestMethod method, String database, Str
7779
//取消注释来实现自定义各个表的主键名
7880
// @Override
7981
// public String getIdKey(String database, String schema, String datasource, String table) {
82+
// // return "_id"; // SurrealDB 强制用 id 作为主键名,surrealdb.java 查不到也改不了,所以需要另外加主键
8083
// return StringUtil.firstCase(table + "Id"); // userId, comemntId ...
81-
// // return StringUtil.toLowerCase(t) + "_id"; // user_id, comemnt_id ...
82-
// // return StringUtil.toUpperCase(t) + "_ID"; // USER_ID, COMMENT_ID ...
84+
// // return StringUtil.toLowerCase(t) + "_id"; // user_id, comemnt_id ...
85+
// // return StringUtil.toUpperCase(t) + "_ID"; // USER_ID, COMMENT_ID ...
8386
// }
8487

8588
@Override
@@ -159,9 +162,9 @@ public String getDBVersion() {
159162
if (isDb2()) {
160163
return "11.5"; //TODO 改成你自己的
161164
}
162-
//if (isSQLite()) {
163-
// return "3.39.3"; //TODO 改成你自己的
164-
//}
165+
// if (isSQLite()) {
166+
// return "3.39.3"; //TODO 改成你自己的
167+
// }
165168
if (isDameng()) {
166169
return "8.1.2.141"; //TODO 改成你自己的
167170
}
@@ -171,18 +174,21 @@ public String getDBVersion() {
171174
if (isMilvus()) {
172175
return "2.3.4"; //TODO 改成你自己的
173176
}
174-
if (isIoTDB()) {
175-
return "1.3.1"; //TODO 改成你自己的
176-
}
177+
// if (isIoTDB()) {
178+
// return "1.3.1"; //TODO 改成你自己的
179+
// }
177180
if (isMongoDB()) {
178181
return "6.0.12"; //TODO 改成你自己的
179182
}
180183
if (isCassandra()) {
181184
return "4.0.1"; //TODO 改成你自己的
182185
}
183-
if (isDuckDB()) {
184-
return "1.1.3"; //TODO 改成你自己的
185-
}
186+
// if (isDuckDB()) {
187+
// return "1.1.3"; //TODO 改成你自己的
188+
// }
189+
// if (isSurrealDB()) {
190+
// return "2.0.0"; //TODO 改成你自己的
191+
// }
186192

187193
return null;
188194
}
@@ -233,18 +239,23 @@ public String getDBUri() {
233239
if (isMilvus()) {
234240
return "http://localhost:19530"; //TODO 改成你自己的
235241
}
236-
if (isIoTDB()) {
237-
return "jdbc:iotdb://localhost:6667"; // ?charset=GB18030 加参数会报错 URI 格式错误 //TODO 改成你自己的
238-
}
242+
// if (isIoTDB()) {
243+
// return "jdbc:iotdb://localhost:6667"; // ?charset=GB18030 加参数会报错 URI 格式错误 //TODO 改成你自己的
244+
// }
239245
if (isMongoDB()) {
240246
return "jdbc:mongodb://atlas-sql-6593c65c296c5865121e6ebe-xxskv.a.query.mongodb.net/myVirtualDatabase?ssl=true&authSource=admin"; //TODO 改成你自己的
241247
}
242248
if (isCassandra()) {
243249
return "http://localhost:7001"; //TODO 改成你自己的
244250
}
245-
if (isDuckDB()) {
246-
return "jdbc:duckdb:/Users/tommylemon/my_database.duckdb"; //TODO 改成你自己的
247-
}
251+
// if (isDuckDB()) {
252+
// return "jdbc:duckdb:/Users/tommylemon/my_database.duckdb"; //TODO 改成你自己的
253+
// }
254+
// if (isSurrealDB()) {
255+
// // return "memory"; //TODO 改成你自己的
256+
// // return "surrealkv://localhost:8000"; //TODO 改成你自己的
257+
// return "ws://localhost:8000"; //TODO 改成你自己的
258+
// }
248259

249260
return null;
250261
}
@@ -291,18 +302,21 @@ public String getDBAccount() {
291302
if (isMilvus()) {
292303
return "root";
293304
}
294-
if (isIoTDB()) {
295-
return "root";
296-
}
305+
// if (isIoTDB()) {
306+
// return "root";
307+
// }
297308
if (isMongoDB()) {
298309
return "root"; //TODO 改成你自己的
299310
}
300311
if (isCassandra()) {
301312
return "root"; //TODO 改成你自己的
302313
}
303-
if (isDuckDB()) {
304-
return "root"; //TODO 改成你自己的
305-
}
314+
// if (isDuckDB()) {
315+
// return "root"; //TODO 改成你自己的
316+
// }
317+
// if (isSurrealDB()) {
318+
// return "root"; //TODO 改成你自己的
319+
// }
306320

307321
return null;
308322
}
@@ -334,9 +348,9 @@ public String getDBPassword() {
334348
if (isDb2()) {
335349
return "123"; //TODO 改成你自己的
336350
}
337-
//if (isSQLite()) {
338-
// return "apijson"; //TODO 改成你自己的
339-
//}
351+
// if (isSQLite()) {
352+
// return "apijson"; //TODO 改成你自己的
353+
// }
340354
if (isDameng()) {
341355
return "SYSDBA";
342356
}
@@ -349,18 +363,21 @@ public String getDBPassword() {
349363
if (isMilvus()) {
350364
return "apijson"; //TODO 改成你自己的
351365
}
352-
if (isIoTDB()) {
353-
return "root";
354-
}
366+
// if (isIoTDB()) {
367+
// return "root";
368+
// }
355369
if (isMongoDB()) {
356370
return "apijson"; //TODO 改成你自己的
357371
}
358372
if (isCassandra()) {
359373
return "apijson"; //TODO 改成你自己的
360374
}
361-
if (isDuckDB()) {
362-
return ""; //TODO 改成你自己的
363-
}
375+
// if (isDuckDB()) {
376+
// return ""; //TODO 改成你自己的
377+
// }
378+
// if (isSurrealDB()) {
379+
// return "root"; //TODO 改成你自己的
380+
// }
364381

365382
return null;
366383
}
@@ -464,29 +481,42 @@ protected int getMaxCombineCount() {
464481
return 10;
465482
}
466483

467-
// @Override
468-
// public String getSchema() {
469-
// return InfluxDBUtil.getSchema(super.getSchema(), DEFAULT_SCHEMA, isIoTDB());
470-
//// return IoTDBUtil.getSchema(super.getSchema(), DEFAULT_SCHEMA, isIoTDB());
471-
// }
472-
//
473-
// @Override
474-
// public String getSQLSchema() {
475-
// return InfluxDBUtil.getSQLSchema(super.getSQLSchema(), isIoTDB());
476-
//// return IoTDBUtil.getSQLSchema(super.getSQLSchema().replaceAll("-", "."), isIoTDB());
477-
// }
484+
// @Override
485+
// public String getNamespace() {
486+
// return SurrealDBUtil.getNamespace(super.getNamespace(), DEFAULT_NAMESPACE, isSurrealDB());
487+
// }
488+
//
489+
// @Override
490+
// public String getSQLNamespace() {
491+
// return SurrealDBUtil.getSQLNamespace(super.getSQLNamespace(), isSurrealDB());
492+
// }
493+
//
494+
// @Override
495+
// public String getSchema() {
496+
// return SurrealDBUtil.getSchema(super.getSchema(), DEFAULT_SCHEMA, isSurrealDB());
497+
//// return InfluxDBUtil.getSchema(super.getSchema(), DEFAULT_SCHEMA, isIoTDB());
498+
//// return IoTDBUtil.getSchema(super.getSchema(), DEFAULT_SCHEMA, isIoTDB());
499+
// }
500+
//
501+
// @Override
502+
// public String getSQLSchema() {
503+
// return SurrealDBUtil.getSQLSchema(super.getSQLSchema(), isSurrealDB());
504+
//// return InfluxDBUtil.getSQLSchema(super.getSQLSchema(), isIoTDB());
505+
//// return IoTDBUtil.getSQLSchema(super.getSQLSchema().replaceAll("-", "."), isIoTDB());
506+
// }
478507

479508
@Override
480509
public String getSQLTable() {
481510
String t = super.getSQLTable();
482-
return isInfluxDB() || isIoTDB() ? t.toLowerCase() : t;
483-
// return isInfluxDB() ? t.toLowerCase() : StringUtil.firstCase(JSONRequest.recoverUnderline(t, false), false);
511+
return isInfluxDB() ? t.toLowerCase() : t;
512+
// return isInfluxDB() || isIoTDB() ? t.toLowerCase() : t;
513+
// return isInfluxDB() ? t.toLowerCase() : StringUtil.firstCase(JSONRequest.recoverUnderline(t, false), false);
484514
}
485515

486-
// @Override
487-
// public String getTablePath() {
488-
// return IoTDBUtil.getTablePath(super.getTablePath(), isIoTDB());
489-
// }
516+
// @Override
517+
// public String getTablePath() {
518+
// return IoTDBUtil.getTablePath(super.getTablePath(), isIoTDB());
519+
// }
490520

491521
// 取消注释可将前端传参驼峰命名转为蛇形命名 aBCdEfg => upper ? A_B_CD_EFG : a_b_cd_efg
492522
// @Override

Diff for: APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoSQLExecutor.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
//import apijson.mongodb.MongoUtil;
2424
//import apijson.iotdb.IoTDBUtil;
2525
import apijson.orm.SQLConfig;
26+
//import apijson.surrealdb.SurrealDBUtil;
2627
import com.alibaba.druid.pool.DruidDataSource;
2728
import com.alibaba.fastjson.JSONObject;
2829
//import org.duckdb.JsonNode;
@@ -194,11 +195,12 @@ public Connection getConnection(SQLConfig<Long> config) throws Exception {
194195
@Override
195196
public JSONObject execute(@NotNull SQLConfig<Long> config, boolean unknownType) throws Exception {
196197
boolean isMilvus = config.isMilvus(); // DATABASE_MILVUS.equals(config.getDatabase()); // APIJSON 6.4.0+ 可用 config.isMilvus();
197-
boolean isCassandra = config.isCassandra();
198-
boolean isInfluxDB = config.isInfluxDB();
199-
boolean isIoTDB = config.isIoTDB(); // DemoSQLConfig.DATABASE_IOTDB.equals(config.getDatabase());
198+
boolean isCassandra = config.isCassandra(); // DemoSQLConfig.DATABASE_CASSANDRA.equals(config.getDatabase());
199+
boolean isInfluxDB = config.isInfluxDB(); // DemoSQLConfig.DATABASE_INFLUXDB.equals(config.getDatabase());
200+
// boolean isIoTDB = config.isIoTDB(); // DemoSQLConfig.DATABASE_IOTDB.equals(config.getDatabase());
201+
// boolean isSurrealDB = config.isSurrealDB(); // DemoSQLConfig.DATABASE_SURREALDB.equals(config.getDatabase());
200202

201-
if (isMilvus || isCassandra || isInfluxDB || isIoTDB) {
203+
if (isMilvus || isCassandra || isInfluxDB) { // || isIoTDB || isSurrealDB) {
202204
// TODO 把 execute 内与缓存无关只与数据库读写逻辑相关的代码抽取到 executeSQL 函数
203205
String sql = config.getSQL(false); // config.isPrepared());
204206
if (sql != null && config.getMethod() == null) {
@@ -257,6 +259,13 @@ else if (sqlPrefix.startsWith("DELETE ")) {
257259
// }
258260
//
259261
// resultList = IoTDBUtil.executeQuery(config, sql, unknownType);
262+
// }
263+
// else if (isSurrealDB) {
264+
// if (isWrite) {
265+
// return SurrealDBUtil.executeUpdate(config, sql);
266+
// }
267+
//
268+
// resultList = SurrealDBUtil.executeQuery(config, sql, unknownType);
260269
// }
261270

262271
// TODO 把 execute 内与缓存无关只与数据库读写逻辑相关的代码抽取到 executeSQL 函数

0 commit comments

Comments
 (0)