lihang
2023-07-04 cd2e57736b9e7893a97e4d0342597c638ab52102
增加DDL对于达梦数据库的适配(细节问题还需调整),目前简单可用
已修改4个文件
已添加4个文件
239 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlDmMapper.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllDmMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlDmMapperProcessor.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
}
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{
}
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);
}
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]::加载达梦数据库DDL操作服务成功");
        }else {
            System.out.println("[fail]::加载达梦数据库DDL操作服务失败");
        }
    }
    @Override
    public void modifyTableBySqlBase(String tableName, String attributeSql) {
        modifyTableBySql(tableName,attributeSql);
    }
    @Override
    boolean support(String url) {
        return "dm.jdbc.driver.DmDriver".equals(url);
    }
}
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;
            }
        }
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: åº”用于达梦数据,生成创建表操作sql的处理器
 *
 * @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]::加载达梦数据库DLL操作服务成功");
        }else {
            System.out.println("[fail]::加载达梦数据库DLL操作服务失败");
        }
    }
    @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);
    }
}
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;
            }
        }
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";