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