diff --git a/pom.xml b/pom.xml
index cc402cf..bb33e1a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,14 +18,14 @@
17
1.18.34
- 1.10.8
- 1.10.8.122
+ 1.10.9
+ 1.10.9.125
5.8.26
3.3.2
2.0.51
2.5.0
0.9.16
- 4.6.3.B
+ 4.7.0
@@ -84,7 +84,6 @@
org.postgresql
postgresql
- runtime
com.zaxxer
diff --git a/src/main/java/com/cool/core/base/BaseController.java b/src/main/java/com/cool/core/base/BaseController.java
index c16dfd5..32fc3f2 100644
--- a/src/main/java/com/cool/core/base/BaseController.java
+++ b/src/main/java/com/cool/core/base/BaseController.java
@@ -119,7 +119,7 @@ public abstract class BaseController, T extends BaseEnt
if (JSONUtil.isTypeJSONArray(body)) {
JSONArray array = JSONUtil.parseArray(body);
return R.ok(Dict.create()
- .set("ids", service.addBatch(requestParams, array.toList(currentEntityClass()))));
+ .set("id", service.addBatch(requestParams, array.toList(currentEntityClass()))));
} else {
return R.ok(Dict.create().set("id",
service.add(requestParams, requestParams.toBean(currentEntityClass()))));
diff --git a/src/main/java/com/cool/core/init/DBFromJsonInit.java b/src/main/java/com/cool/core/init/DBFromJsonInit.java
index 14fc10f..9f01048 100644
--- a/src/main/java/com/cool/core/init/DBFromJsonInit.java
+++ b/src/main/java/com/cool/core/init/DBFromJsonInit.java
@@ -9,6 +9,8 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.cool.core.base.service.MapperProviderService;
+import com.cool.core.mybatis.pg.PostgresSequenceSyncService;
+import com.cool.core.util.DatabaseDialectUtils;
import com.cool.core.util.EntityUtils;
import com.cool.modules.base.entity.sys.BaseSysConfEntity;
import com.cool.modules.base.entity.sys.BaseSysMenuEntity;
@@ -49,6 +51,8 @@ public class DBFromJsonInit {
final private ApplicationEventPublisher eventPublisher;
+ final private PostgresSequenceSyncService postgresSequenceSyncService;
+
@Value("${cool.initData}")
private boolean initData;
@@ -58,14 +62,24 @@ public class DBFromJsonInit {
return;
}
// 初始化自定义的数据
- extractedDb();
+ boolean initFlag = extractedDb();
// 初始化菜单数据
- extractedMenu();
+ initFlag = extractedMenu() || initFlag;
// 发送数据库初始化完成事件
eventPublisher.publishEvent(new DbInitCompleteEvent(this));
+ if (initFlag) {
+ // 如果是postgresql,同步序列
+ syncIdentitySequences();
+ }
log.info("数据初始化完成!");
}
+ private void syncIdentitySequences() {
+ if (DatabaseDialectUtils.isPostgresql()) {
+ postgresSequenceSyncService.syncIdentitySequences();
+ }
+ }
+
@Getter
public static class DbInitCompleteEvent {
private final Object source;
@@ -79,21 +93,23 @@ public class DBFromJsonInit {
/**
* 解析插入业务数据
*/
- private void extractedDb() {
+ private boolean extractedDb() {
try {
// 加载 JSON 文件
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:cool/data/db/*.json");
// 遍历所有.json文件
- analysisResources(resources);
+ return analysisResources(resources);
} catch (Exception e) {
log.error("Failed to initialize data", e);
}
+ return false;
}
- private void analysisResources(Resource[] resources)
+ private boolean analysisResources(Resource[] resources)
throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
String prefix = "db_";
+ boolean isInit = false;
for (Resource resource : resources) {
File resourceFile = new File(resource.getURL().getFile());
String fileName = prefix + resourceFile.getName();
@@ -112,8 +128,10 @@ public class DBFromJsonInit {
baseSysUserEntity.setCValue("success");
// 当前文件已加载
baseSysConfService.add(baseSysUserEntity);
+ isInit = true;
log.info("{} 业务数据初始化成功...", fileName);
}
+ return isInit;
}
private void analysisJson(JSONObject jsonObject)
@@ -158,7 +176,8 @@ public class DBFromJsonInit {
/**
* 解析插入菜单数据
*/
- public void extractedMenu() {
+ public boolean extractedMenu() {
+ boolean initFlag = false;
try {
String prefix = "menu_";
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
@@ -173,10 +192,12 @@ public class DBFromJsonInit {
continue;
}
analysisResources(resource, fileName);
+ initFlag = true;
}
} catch (Exception e) {
log.error("Failed to initialize data", e);
}
+ return initFlag;
}
private void analysisResources(Resource resource, String fileName) throws IOException {
diff --git a/src/main/java/com/cool/core/mybatis/handler/BaseJsonTypeHandler.java b/src/main/java/com/cool/core/mybatis/handler/BaseJsonTypeHandler.java
new file mode 100644
index 0000000..a403c46
--- /dev/null
+++ b/src/main/java/com/cool/core/mybatis/handler/BaseJsonTypeHandler.java
@@ -0,0 +1,48 @@
+package com.cool.core.mybatis.handler;
+
+import com.cool.core.util.DatabaseDialectUtils;
+import com.mybatisflex.core.util.StringUtil;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.postgresql.util.PGobject;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+public abstract class BaseJsonTypeHandler extends BaseTypeHandler {
+
+ @Override
+ public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
+ if (DatabaseDialectUtils.isPostgresql()) {
+ PGobject jsonObject = new PGobject();
+ jsonObject.setType("json");
+ jsonObject.setValue(toJson(parameter));
+ ps.setObject(i, jsonObject);
+ } else {
+ ps.setString(i, toJson(parameter));
+ }
+ }
+
+ @Override
+ public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
+ final String json = rs.getString(columnName);
+ return StringUtil.noText(json) ? null : parseJson(json);
+ }
+
+ @Override
+ public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+ final String json = rs.getString(columnIndex);
+ return StringUtil.noText(json) ? null : parseJson(json);
+ }
+
+ @Override
+ public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+ final String json = cs.getString(columnIndex);
+ return StringUtil.noText(json) ? null : parseJson(json);
+ }
+
+ protected abstract T parseJson(String json);
+
+ protected abstract String toJson(T object);
+
+}
diff --git a/src/main/java/com/cool/core/mybatis/handler/Fastjson2TypeHandler.java b/src/main/java/com/cool/core/mybatis/handler/Fastjson2TypeHandler.java
new file mode 100644
index 0000000..aad475e
--- /dev/null
+++ b/src/main/java/com/cool/core/mybatis/handler/Fastjson2TypeHandler.java
@@ -0,0 +1,73 @@
+package com.cool.core.mybatis.handler;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONReader;
+import com.alibaba.fastjson2.JSONWriter;
+import com.alibaba.fastjson2.TypeReference;
+
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+public class Fastjson2TypeHandler extends BaseJsonTypeHandler