SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉(zhuǎn)換達夢數(shù)據(jù)庫)
一、達夢數(shù)據(jù)庫的安裝和使用
1、達夢數(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ù)庫的資料請關注腳本之家其它相關文章!
相關文章
MyBatis?ofType和javaType的區(qū)別說明
這篇文章主要介紹了MyBatis?ofType和javaType的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot整合Jasypt實現(xiàn)配置加密的步驟詳解
Jasypt是一個Java庫,提供了一種簡單的加密解密方式,可用于保護敏感數(shù)據(jù),例如密碼、API密鑰和數(shù)據(jù)庫連接信息等,本文給大家介紹了SpringBoot整合Jasypt實現(xiàn)配置加密的詳細步驟,感興趣的同學可以參考一下2023-11-11SpringBoot配置GlobalExceptionHandler全局異常處理器案例
這篇文章主要介紹了SpringBoot配置GlobalExceptionHandler全局異常處理器案例,通過簡要的文章說明如何去進行配置以及使用,需要的朋友可以參考下2021-06-06SpringBoot + openFeign實現(xiàn)遠程接口調(diào)用的過程
現(xiàn)在的微服務項目不少都使用的是springboot+spring cloud構建的項目,微服務之間的調(diào)用都離不開feign來進行遠程調(diào)用,這篇文章主要介紹了SpringBoot + openFeign實現(xiàn)遠程接口調(diào)用,需要的朋友可以參考下2022-11-11Java線程安全問題小結_動力節(jié)點Java學院整理
這篇文章主要介紹了Java線程安全問題小結的相關資料,需要的朋友可以參考下2017-05-05SpringBoot使用AOP+注解實現(xiàn)簡單的權限驗證的方法
這篇文章主要介紹了SpringBoot使用AOP+注解實現(xiàn)簡單的權限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05