From cd2e57736b9e7893a97e4d0342597c638ab52102 Mon Sep 17 00:00:00 2001
From: lihang <lihang@vci-tech.com>
Date: 星期二, 04 七月 2023 18:37:53 +0800
Subject: [PATCH] 增加DDL对于达梦数据库的适配(细节问题还需调整),目前简单可用
---
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java | 34 ++++++++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java | 13 ++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java | 33 ++++++--
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java | 75 ++++++++++++++++++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java | 11 ++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlDmMapper.java | 55 +++++++++++++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllDmMapper.java | 11 ++
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java | 7 +
8 files changed, 224 insertions(+), 15 deletions(-)
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlDmMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlDmMapper.java
new file mode 100644
index 0000000..e19a148
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlDmMapper.java
@@ -0,0 +1,55 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 杈炬ⅵ鏁版嵁搴撶殑鎿嶄綔鎵ц鍣�
+ */
+@Repository
+public interface DdlDmMapper extends DdlMapper{
+
+ /**
+ * 鍒犻櫎琛ㄦ牸涓殑鍒�
+ * @param tableName 琛ㄥ悕绉�
+ * @param columnName 鍒楀悕绉�
+ * @return 鍙楀奖鍝嶇殑琛屾暟
+ */
+ @Update("alter table ${tableName} DROP COLUMN ${columnName}")
+ @Override
+ int dropTableColumn(@Param("tableName")String tableName, @Param("columnName")String columnName);
+
+ /**
+ * 鍒犻櫎琛ㄦ牸
+ * @param tableName 琛ㄦ牸鍚嶇О
+ * @return 褰卞搷鐨勮鏁�
+ */
+ @Update("drop table if exists ${tableName}")
+ @ResultType(Integer.class)
+ @Override
+ int dropTable(@Param("tableName") String tableName);
+
+ /**
+ * 鎵归噺淇敼鏁版嵁搴撹〃鐨勫瓧娈�
+ * @param tableName 琛ㄦ牸鐨勫悕绉�
+ * @param attributeSql 淇敼鐨勫睘鎬х殑sql
+ * @return 褰卞搷鐨勮鏁�
+ */
+ @Update("alter table ${tableName} modify ( ${attributeSql} ) ")
+ @ResultType(Integer.class)
+ @Override
+ int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+
+ /**
+ * 鍚戞暟鎹簱琛ㄤ腑鎵归噺娣诲姞瀛楁
+ * @param tableName 琛ㄦ牸鐨勫悕绉�
+ * @param attributeSql 瑕佹坊鍔犵殑鏂扮殑sql
+ * @return 褰卞搷鐨勮鏁�
+ */
+ @Update("alter table ${tableName} add ( ${attributeSql} )")
+ @ResultType(Integer.class)
+ @Override
+ int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllDmMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllDmMapper.java
new file mode 100644
index 0000000..46d9f45
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllDmMapper.java
@@ -0,0 +1,11 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 杈炬ⅵ鏁版嵁搴撶殑鎿嶄綔鎵ц鍣�
+ */
+@Repository
+public interface DllDmMapper extends DllMapper{
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java
index d7664a2..ce77cee 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java
@@ -1,6 +1,11 @@
package com.vci.ubcs.ddl.mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
/**
* Description:
*
@@ -9,21 +14,31 @@
*/
public interface DllMapper {
- int createViewBySql(String viewCreateSql);
+ @Update({"${viewCreateSql}"})
+ int createViewBySql(@Param("viewCreateSql") String viewCreateSql);
- int createTableBySql(String tableName,String attributeSql);
+ @Update({"create table ${tableName} ( ${attributeSql} )"})
+ int createTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
- int checkTableExist(String tableName);
+ @Update({"COMMENT ON TABLE ${tableName} IS '${comment}' "})
+ int commentTable(@Param("tableName") String tableName, @Param("comment") String comment);
- int countAll(String tableName);
+ @Update({"COMMENT ON column ${tableName}.${columnName} IS '${comment}' "})
+ int commentColumnTable(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("comment") String comment);
- int commentTable(String tableName, String comment);
+ @Update({"alter table ${tableName} modify ( ${attributeSql} ) "})
+ int modifyTableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
- int commentColumnTable(String tableName, String columnName, String comment);
+ @Update({"alter table ${tableName} add ( ${attributeSql} )"})
+ int addColumn2TableBySql(@Param("tableName") String tableName, @Param("attributeSql") String attributeSql);
- int modifyTableBySql(String tableName, String attributeSql);
+ @Update({"drop table if exists ${tableName}"})
+ int dropTable(@Param("tableName") String tableName);
- int addColumn2TableBySql(String tableName, String attributeSql);
+ @Select({"select count(table_name) from user_tables where upper(table_name) = upper(#{tableName,jdbcType=VARCHAR})"})
+ int checkTableExist(@Param("tableName") String tableName);
- int dropTable(String tableName);
+ @Select({"select count(*) from ${tableName}"})
+ @ResultType(Integer.class)
+ int countAll(@Param("tableName") String tableName);
}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java
new file mode 100644
index 0000000..d40064d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java
@@ -0,0 +1,34 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.ubcs.ddl.mapper.DdlDmMapper;
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * 杈炬ⅵ鏁版嵁搴撴墽琛岃〃鎿嶄綔sql鐨勫鐞嗗櫒
+ */
+@Component
+public class DdlDmMapperProcessor extends DdlMapperProcessor{
+
+ private static final DdlMapper MAPPER = VciSpringUtil.getBean(DdlDmMapper.class);
+
+ public DdlDmMapperProcessor() {
+ super(MAPPER);
+ System.out.println("-----------------");
+ if (MAPPER != null){
+ System.out.println("[success]::鍔犺浇杈炬ⅵ鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+ }else {
+ System.out.println("[fail]::鍔犺浇杈炬ⅵ鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+ }
+ }
+ @Override
+ public void modifyTableBySqlBase(String tableName, String attributeSql) {
+ modifyTableBySql(tableName,attributeSql);
+ }
+
+ @Override
+ boolean support(String url) {
+ return "dm.jdbc.driver.DmDriver".equals(url);
+ }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
index 5f77cc6..578d9b8 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -7,6 +7,8 @@
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -18,10 +20,11 @@
* @author LiHang
* @date 2023/4/24
*/
+@Component
public class DdlMapperProcessStrategy {
@Value("${spring.datasource.driver-class-name}")
- private static final String DATABASE_DRIVER = "";
+ private String DATABASE_DRIVER;
private final static List<DdlMapperProcessor> PROCESSORS = Lists.newArrayList();
@@ -29,11 +32,15 @@
PROCESSORS.add(VciSpringUtil.getBean(DdlOracleMapperProcessor.class));
PROCESSORS.add(VciSpringUtil.getBean(DdlMySqlMapperProcessor.class));
PROCESSORS.add(VciSpringUtil.getBean(DdlMsMapperProcessor.class));
+ PROCESSORS.add(VciSpringUtil.getBean(DdlDmMapperProcessor.class));
}
- public static DdlMapperProcessor getProcessor(){
+ @Bean("ddlMapper")
+ public DdlMapperProcessor getProcessor(){
for (DdlMapperProcessor processor : PROCESSORS) {
if (processor.support(DATABASE_DRIVER)){
+ System.out.println("===========================================");
+ System.out.println("鑾峰彇DDL鎿嶄綔绫绘垚鍔燂細" + processor.getClass().getName());
return processor;
}
}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java
new file mode 100644
index 0000000..e93f205
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java
@@ -0,0 +1,75 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.DllDmMapper;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Description: 搴旂敤浜庤揪姊︽暟鎹紝鐢熸垚鍒涘缓琛ㄦ搷浣渟ql鐨勫鐞嗗櫒
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DllDmMapperProcessor extends DllMapperProcessor{
+
+ private static final DllMapper MAPPER = VciSpringUtil.getBean(DllDmMapper.class);
+
+ private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
+
+ static {
+ // 闇�瑕侀噸鏂版槧灏勭殑瀛楁绫诲瀷鍦ㄨ繖閲屽啓
+ FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("DOUBLE",26,8,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("BIGINT",22,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATE",null,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",null,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIME",null,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("TEXT",null,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("CLOB",100,null,true,null));
+ FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",255,null,true,null));
+ }
+
+ public DllDmMapperProcessor() {
+ super(MAPPER);
+ System.out.println("-----------------");
+ if (MAPPER != null){
+ System.out.println("[success]::鍔犺浇杈炬ⅵ鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+ }else {
+ System.out.println("[fail]::鍔犺浇杈炬ⅵ鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+ }
+ }
+
+ @Override
+ public boolean support(String url) {
+ return "dm.jdbc.driver.DmDriver".equals(url);
+ }
+
+ @Override
+ protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+ return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+ }
+
+ /**
+ * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
+ *
+ * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+ * @return VCI瀛楁绫诲瀷
+ */
+ @Override
+ public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
+ return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
+ }
+
+ @Override
+ public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
+ return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
+ }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
index 678ed44..db82496 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -5,9 +5,13 @@
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
@@ -17,10 +21,11 @@
* @author LiHang
* @date 2023/4/24
*/
+@Component
public class DllMapperProcessorStrategy {
@Value("${spring.datasource.driver-class-name}")
- private static final String DATABASE_DRIVER = "";
+ private String DATABASE_DRIVER;
public static List<DllMapperProcessor> processors = Lists.newArrayList();
@@ -29,11 +34,15 @@
processors.add(VciSpringUtil.getBean(DllSqlLiteMapperProcessor.class));
processors.add(VciSpringUtil.getBean(DllMySqlMapperProcessor.class));
processors.add(VciSpringUtil.getBean(DllOracleMapperProcessor.class));
+ processors.add(VciSpringUtil.getBean(DllDmMapperProcessor.class));
}
- public static DllMapperProcessor getProcessor(){
+ @Bean("dllMapper")
+ public DllMapperProcessor getProcessor(){
for (DllMapperProcessor processor : processors) {
if (processor.support(DATABASE_DRIVER)){
+ System.out.println("===========================================");
+ System.out.println("鑾峰彇DLL鎿嶄綔绫绘垚鍔燂細" + processor.getClass().getName());
return processor;
}
}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
index 6d1f373..bc9b2ad 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -35,6 +35,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
+import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -64,13 +65,15 @@
/**
* ddl鏁版嵁鎿嶄綔鏈嶅姟
*/
- private final DdlMapperProcessor ddlMapper = DdlMapperProcessStrategy.getProcessor();
+ @Autowired
+ private DdlMapperProcessor ddlMapper;
/**
* dll鏁版嵁鎿嶄綔鏈嶅姟
*/
- private final DllMapperProcessor dllMapper = DllMapperProcessorStrategy.getProcessor();
+ @Autowired
+ private DllMapperProcessor dllMapper;
private static final String YES = "Y";
--
Gitblit v1.9.3