欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉(zhuǎn)換達夢數(shù)據(jù)庫)

 更新時間:2025年03月10日 15:41:45   作者:m0_74824496  
這篇文章主要為大家詳細介紹了MYSQL轉(zhuǎn)換達夢數(shù)據(jù)庫以及SpringBoot項目整合達夢數(shù)據(jù)庫的相關教程,文中的示例代碼講解詳細,需要的可以參考下

一、達夢數(shù)據(jù)庫的安裝和使用

1、達夢數(shù)據(jù)庫下載

產(chǎn)品下載 | 達夢數(shù)據(jù)庫

2、Windows環(huán)境安裝達夢數(shù)據(jù)庫

參考文章:Windows環(huán)境安裝達夢數(shù)據(jù)庫_達夢數(shù)據(jù)庫安裝

二、MYSQL數(shù)據(jù)庫 遷移至 達夢數(shù)據(jù)庫

參考文章:MySQL數(shù)據(jù)遷移至達夢數(shù)據(jù)庫

在安裝的tool目錄下,查找相關的工具:

1、DM控制臺工具:Console

服務器配置又該有兩種方式:①DM控制臺工具修改;②配置文件修改。

方法一:服務器配置:設置系統(tǒng)兼容性(DM控制臺工具),兼容MySQL

方法二:(1)查找dm.ini文件

(2)dm.ini修改【#compatibility】的【COMPATIBLE_MODE】=4

(3)重啟Dameng服務

2、DM數(shù)據(jù)遷移工具:DTS

在這里操作:MySQL數(shù)據(jù)遷移至達夢數(shù)據(jù)庫

注意:當遷移過程中出現(xiàn)下面問題時,如有觸發(fā)器或者外鍵,需要先關掉觸發(fā)器和外鍵,然后進行遷移,不然會導致遷移失敗。

MYSQL的數(shù)據(jù)表轉(zhuǎn)換成DM的數(shù)據(jù)表時,點擊轉(zhuǎn)換按鈕。如下:

設置【1:遷移策略選項】

設置【2:列映射選項】

3、添加用戶:如果導入的DM數(shù)據(jù)庫需要和MYSQL的用戶一樣,添加ROOT用戶。

三、Spring項目整合達夢數(shù)據(jù)庫

1、配置java項目連接達夢,切換數(shù)據(jù)連接驅(qū)動

2、Maven導入達夢數(shù)據(jù)庫驅(qū)動包

3、表的實體類映射。【訪問形式:模式名.表名】

4、XML文件:查詢表【模式名.表名】

5、MYSQL字段類型與DM數(shù)據(jù)類型的轉(zhuǎn)換?!綝M:達夢數(shù)據(jù)庫】

package com.company.common.core.annotation;

/**
 * 數(shù)據(jù)庫類型
 *
 * @author kally
 * @date 2023/12/13
 */
public enum DbType {
    /**
     * 數(shù)據(jù)庫類型(類型,描述)
     */
    MYSQL("mysql", "MySql數(shù)據(jù)庫"),
    MARIADB("mariadb", "MariaDB數(shù)據(jù)庫"),
    ORACLE("oracle", "Oracle11g及以下數(shù)據(jù)庫(高版本推薦使用ORACLE_NEW)"),
    ORACLE_12C("oracle12c", "Oracle12c+數(shù)據(jù)庫"),
    DB2("db2", "DB2數(shù)據(jù)庫"),
    H2("h2", "H2數(shù)據(jù)庫"),
    HSQL("hsql", "HSQL數(shù)據(jù)庫"),
    SQLITE("sqlite", "SQLite數(shù)據(jù)庫"),
    POSTGRE_SQL("postgresql", "Postgre數(shù)據(jù)庫"),
    SQL_SERVER2005("sqlserver2005", "SQLServer2005數(shù)據(jù)庫"),
    SQL_SERVER("sqlserver", "SQLServer數(shù)據(jù)庫"),
    DM("dm", "達夢數(shù)據(jù)庫"),
    XU_GU("xugu", "虛谷數(shù)據(jù)庫"),
    KINGBASE_ES("kingbasees", "人大金倉數(shù)據(jù)庫"),
    PHOENIX("phoenix", "Phoenix HBase數(shù)據(jù)庫"),
    GAUSS("zenith", "Gauss 數(shù)據(jù)庫"),
    CLICK_HOUSE("clickhouse", "clickhouse 數(shù)據(jù)庫"),
    GBASE("gbase", "南大通用(華庫)數(shù)據(jù)庫"),
    GBASE_8S("gbase-8s", "南大通用數(shù)據(jù)庫 GBase 8s"),

    @Deprecated
    GBASEDBT("gbasedbt", "南大通用數(shù)據(jù)庫"),

    @Deprecated
    GBASE_INFORMIX("gbase 8s", "南大通用數(shù)據(jù)庫 GBase 8s"),

    SINODB("sinodb", "星瑞格數(shù)據(jù)庫"),
    OSCAR("oscar", "神通數(shù)據(jù)庫"),
    SYBASE("sybase", "Sybase ASE 數(shù)據(jù)庫"),
    OCEAN_BASE("oceanbase", "OceanBase 數(shù)據(jù)庫"),
    FIREBIRD("Firebird", "Firebird 數(shù)據(jù)庫"),
    HIGH_GO("highgo", "瀚高數(shù)據(jù)庫"),
    CUBRID("cubrid", "CUBRID數(shù)據(jù)庫"),
    GOLDILOCKS("goldilocks", "GOLDILOCKS數(shù)據(jù)庫"),
    CSIIDB("csiidb", "CSIIDB數(shù)據(jù)庫"),
    SAP_HANA("hana", "SAP_HANA數(shù)據(jù)庫"),
    IMPALA("impala", "impala數(shù)據(jù)庫"),
    VERTICA("vertica", "vertica數(shù)據(jù)庫"),
    XCloud("xcloud", "行云數(shù)據(jù)庫"),
    REDSHIFT("redshift", "亞馬遜redshift數(shù)據(jù)庫"),
    OPENGAUSS("openGauss", "華為 opengauss 數(shù)據(jù)庫"),
    TDENGINE("TDengine", "TDengine數(shù)據(jù)庫"),
    INFORMIX("informix", "Informix數(shù)據(jù)庫"),
    UXDB("uxdb", "優(yōu)炫數(shù)據(jù)庫"),
    LEALONE("lealone", "Lealone數(shù)據(jù)庫"),
    OTHER("other", "其他數(shù)據(jù)庫");

    private final String db;
    private final String desc;

    public static DbType getDbType(String dbType) {
        DbType[] var1 = values();
        int var2 = var1.length;

        for (int var3 = 0; var3 < var2; ++var3) {
            DbType type = var1[var3];
            if (type.db.equalsIgnoreCase(dbType)) {
                return type;
            }
        }

        return OTHER;
    }

    public String getDb() {
        return this.db;
    }

    public String getDesc() {
        return this.desc;
    }

    /**
     * 數(shù)據(jù)庫類型
     *
     * @param db   數(shù)據(jù)庫
     * @param desc 描述
     */
    private DbType(final String db, final String desc) {
        this.db = db;
        this.desc = desc;
    }

}

6、達夢數(shù)據(jù)庫分頁插件

7、SQL適配關鍵字列名

mysql使用反引號來區(qū)分列名和關鍵字;達夢數(shù)據(jù)庫使用雙引號來區(qū)分;實體類映射字段之前的修改。

MybatisPlusConfig.java文件再加入下列代碼,復制即可。

@Bean
    public DmFieldCustomizer getDmFieldCustomizer() {
        return new DmFieldCustomizer();
    }

    /**
     * 在mybatisPlus加載進spring容器之前自定義某些配置
     *
     * @author HetFrame
     */
    public static class DmFieldCustomizer implements MybatisPlusPropertiesCustomizer {
        public DmFieldCustomizer() {
            log.info("加載DmFieldCustomizer...");
        }

        @SneakyThrows
        @Override
        public void customize(MybatisPlusProperties properties) {
            // 使用達夢數(shù)據(jù)庫
            if (Arrays.toString(properties.getMapperLocations()).contains("dm")) {
                log.info("使用達夢數(shù)據(jù)庫");
                //實體類的class
                List<Class<?>> classList = new ArrayList<>();
                PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
                //找到所有實體類的class
                Resource[] resources = resolver.getResources("classpath*:com/**/entity/**/*.class");
                for (Resource res : resources) {
                    // 先獲取resource的元信息,然后獲取class元信息,最后得到 class 全路徑
                    String clsName = new SimpleMetadataReaderFactory().getMetadataReader(res).getClassMetadata().getClassName();
                    // 通過名稱加載
                    Class<?> clazz = Class.forName(clsName);
                    classList.add(clazz);
                }

                classList.forEach(e -> {
                    List<Field> list = TableInfoHelper.getAllFields(e);
                    list.forEach(field -> {
                        TableField tableField = field.getAnnotation(TableField.class);
                        String metaColName;
                        if (tableField != null && StringUtils.isNotBlank(metaColName = tableField.value()) && metaColName.contains("`")) {

                            String newColName = metaColName.replace("`", """);

                            InvocationHandler invocationHandler = Proxy.getInvocationHandler(tableField);
                            try {
                                Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues");
                                memberValues.setAccessible(true);
                                Map memberValuesMap = (Map) memberValues.get(invocationHandler);
                                memberValuesMap.put("value", newColName);
                                log.info("將實體類映射字段{}修改為{}", metaColName, newColName);
                            } catch (NoSuchFieldException | IllegalAccessException exception) {
                                throw new RuntimeException(exception);
                            }
                        }
                    });
                });

            } else {
                log.info("使用mysql數(shù)據(jù)庫");
            }
        }
    }

package com.company.common.framework.mybatis;


import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;

/**
 * MybatisPlusPropertiesCustomizer 用于在讀取 properties 之后進行一些自定義操作
 *
 * @author kally
 * @date 2023/12/13
 */
public interface MybatisPlusPropertiesCustomizer {
    /**
     * mysql中我們使用反引號來區(qū)分列名和關鍵字;但在達夢數(shù)據(jù)庫中,使用雙引號來區(qū)分。
     * 而如果創(chuàng)建實體類在注解 @TableField 中使用了反引號例如 @TableField(`range`),
     * 這種我們改了的話,mysql 就用不了,不改達夢就用不了。所以從代碼入手,在啟動時用反射修改值。
     * 達夢數(shù)據(jù)庫某些關鍵字例如 audit,在 mysql 中不是關鍵字的,需要手動設置 @TableField(`audit`)。
     */

    /**
     * MybatisPlusPropertiesCustomizer 用于在讀取 properties 之后進行一些自定義操作
     *
     * @param properties {@link MybatisPlusProperties}
     */
    void customize(MybatisPlusProperties properties);
}

以上就是SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉(zhuǎn)換達夢數(shù)據(jù)庫)的詳細內(nèi)容,更多關于SpringBoot整合達夢數(shù)據(jù)庫的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Java中的sleep()和wait()的區(qū)別

    詳解Java中的sleep()和wait()的區(qū)別

    這篇文章主要介紹了詳解Java中的sleep()和wait()的區(qū)別的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • MyBatis?ofType和javaType的區(qū)別說明

    MyBatis?ofType和javaType的區(qū)別說明

    這篇文章主要介紹了MyBatis?ofType和javaType的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot整合Jasypt實現(xiàn)配置加密的步驟詳解

    SpringBoot整合Jasypt實現(xiàn)配置加密的步驟詳解

    Jasypt是一個Java庫,提供了一種簡單的加密解密方式,可用于保護敏感數(shù)據(jù),例如密碼、API密鑰和數(shù)據(jù)庫連接信息等,本文給大家介紹了SpringBoot整合Jasypt實現(xiàn)配置加密的詳細步驟,感興趣的同學可以參考一下
    2023-11-11
  • SpringCloud?Feign超詳細講解

    SpringCloud?Feign超詳細講解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端;?Ribbon負載均衡、?Hystrⅸ服務熔斷是我們Spring?Cloud中進行微服務開發(fā)非?;A的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • SpringBoot配置GlobalExceptionHandler全局異常處理器案例

    SpringBoot配置GlobalExceptionHandler全局異常處理器案例

    這篇文章主要介紹了SpringBoot配置GlobalExceptionHandler全局異常處理器案例,通過簡要的文章說明如何去進行配置以及使用,需要的朋友可以參考下
    2021-06-06
  • 淺談java封裝

    淺談java封裝

    封裝封裝就是將屬性私有化,提供公有的方法訪問私有的屬性。*實現(xiàn)封裝的步驟:(1)修改屬性的可見性來限制對屬性的訪問。(2)為每個屬性創(chuàng)建一對賦值方法和取值方法,用于對這些屬性的訪問。(3)在賦值和取值方法中,加入對屬性的存取限制。
    2015-03-03
  • SpringBoot + openFeign實現(xiàn)遠程接口調(diào)用的過程

    SpringBoot + openFeign實現(xiàn)遠程接口調(diào)用的過程

    現(xiàn)在的微服務項目不少都使用的是springboot+spring cloud構建的項目,微服務之間的調(diào)用都離不開feign來進行遠程調(diào)用,這篇文章主要介紹了SpringBoot + openFeign實現(xiàn)遠程接口調(diào)用,需要的朋友可以參考下
    2022-11-11
  • Java線程安全問題小結_動力節(jié)點Java學院整理

    Java線程安全問題小結_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java線程安全問題小結的相關資料,需要的朋友可以參考下
    2017-05-05
  • JavaWeb簡單文件上傳流程的實戰(zhàn)記錄

    JavaWeb簡單文件上傳流程的實戰(zhàn)記錄

    在Web應用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,下面這篇文章主要給大家介紹了關于JavaWeb實現(xiàn)簡單文件上傳流程的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • SpringBoot使用AOP+注解實現(xiàn)簡單的權限驗證的方法

    SpringBoot使用AOP+注解實現(xiàn)簡單的權限驗證的方法

    這篇文章主要介紹了SpringBoot使用AOP+注解實現(xiàn)簡單的權限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論