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