SpringBoot項(xiàng)目整合達(dá)夢數(shù)據(jù)庫詳解(MYSQL轉(zhuǎn)換達(dá)夢數(shù)據(jù)庫)
一、達(dá)夢數(shù)據(jù)庫的安裝和使用
1、達(dá)夢數(shù)據(jù)庫下載
產(chǎn)品下載 | 達(dá)夢數(shù)據(jù)庫

2、Windows環(huán)境安裝達(dá)夢數(shù)據(jù)庫
參考文章:Windows環(huán)境安裝達(dá)夢數(shù)據(jù)庫_達(dá)夢數(shù)據(jù)庫安裝
二、MYSQL數(shù)據(jù)庫 遷移至 達(dá)夢數(shù)據(jù)庫
參考文章:MySQL數(shù)據(jù)遷移至達(dá)夢數(shù)據(jù)庫
在安裝的tool目錄下,查找相關(guān)的工具:

1、DM控制臺工具:Console

服務(wù)器配置又該有兩種方式:①DM控制臺工具修改;②配置文件修改。
方法一:服務(wù)器配置:設(shè)置系統(tǒng)兼容性(DM控制臺工具),兼容MySQL

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

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

(3)重啟Dameng服務(wù)

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

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

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

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

設(shè)置【1:遷移策略選項(xiàng)】

設(shè)置【2:列映射選項(xiàng)】

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


三、Spring項(xiàng)目整合達(dá)夢數(shù)據(jù)庫
1、配置java項(xiàng)目連接達(dá)夢,切換數(shù)據(jù)連接驅(qū)動

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

3、表的實(shí)體類映射?!驹L問形式:模式名.表名】

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

5、MYSQL字段類型與DM數(shù)據(jù)類型的轉(zhuǎn)換?!綝M:達(dá)夢數(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", "達(dá)夢數(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、達(dá)夢數(shù)據(jù)庫分頁插件


7、SQL適配關(guān)鍵字列名
mysql使用反引號來區(qū)分列名和關(guān)鍵字;達(dá)夢數(shù)據(jù)庫使用雙引號來區(qū)分;實(shí)體類映射字段之前的修改。
MybatisPlusConfig.java文件再加入下列代碼,復(fù)制即可。
@Bean
public DmFieldCustomizer getDmFieldCustomizer() {
return new DmFieldCustomizer();
}
/**
* 在mybatisPlus加載進(jìn)spring容器之前自定義某些配置
*
* @author HetFrame
*/
public static class DmFieldCustomizer implements MybatisPlusPropertiesCustomizer {
public DmFieldCustomizer() {
log.info("加載DmFieldCustomizer...");
}
@SneakyThrows
@Override
public void customize(MybatisPlusProperties properties) {
// 使用達(dá)夢數(shù)據(jù)庫
if (Arrays.toString(properties.getMapperLocations()).contains("dm")) {
log.info("使用達(dá)夢數(shù)據(jù)庫");
//實(shí)體類的class
List<Class<?>> classList = new ArrayList<>();
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//找到所有實(shí)體類的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("將實(shí)體類映射字段{}修改為{}", 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 之后進(jìn)行一些自定義操作
*
* @author kally
* @date 2023/12/13
*/
public interface MybatisPlusPropertiesCustomizer {
/**
* mysql中我們使用反引號來區(qū)分列名和關(guān)鍵字;但在達(dá)夢數(shù)據(jù)庫中,使用雙引號來區(qū)分。
* 而如果創(chuàng)建實(shí)體類在注解 @TableField 中使用了反引號例如 @TableField(`range`),
* 這種我們改了的話,mysql 就用不了,不改達(dá)夢就用不了。所以從代碼入手,在啟動時用反射修改值。
* 達(dá)夢數(shù)據(jù)庫某些關(guān)鍵字例如 audit,在 mysql 中不是關(guān)鍵字的,需要手動設(shè)置 @TableField(`audit`)。
*/
/**
* MybatisPlusPropertiesCustomizer 用于在讀取 properties 之后進(jìn)行一些自定義操作
*
* @param properties {@link MybatisPlusProperties}
*/
void customize(MybatisPlusProperties properties);
}
以上就是SpringBoot項(xiàng)目整合達(dá)夢數(shù)據(jù)庫詳解(MYSQL轉(zhuǎn)換達(dá)夢數(shù)據(jù)庫)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合達(dá)夢數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MyBatis?ofType和javaType的區(qū)別說明
這篇文章主要介紹了MyBatis?ofType和javaType的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
SpringBoot整合Jasypt實(shí)現(xiàn)配置加密的步驟詳解
Jasypt是一個Java庫,提供了一種簡單的加密解密方式,可用于保護(hù)敏感數(shù)據(jù),例如密碼、API密鑰和數(shù)據(jù)庫連接信息等,本文給大家介紹了SpringBoot整合Jasypt實(shí)現(xiàn)配置加密的詳細(xì)步驟,感興趣的同學(xué)可以參考一下2023-11-11
SpringBoot配置GlobalExceptionHandler全局異常處理器案例
這篇文章主要介紹了SpringBoot配置GlobalExceptionHandler全局異常處理器案例,通過簡要的文章說明如何去進(jìn)行配置以及使用,需要的朋友可以參考下2021-06-06
SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用的過程
現(xiàn)在的微服務(wù)項(xiàng)目不少都使用的是springboot+spring cloud構(gòu)建的項(xiàng)目,微服務(wù)之間的調(diào)用都離不開feign來進(jìn)行遠(yuǎn)程調(diào)用,這篇文章主要介紹了SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用,需要的朋友可以參考下2022-11-11
Java線程安全問題小結(jié)_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java線程安全問題小結(jié)的相關(guān)資料,需要的朋友可以參考下2017-05-05
JavaWeb簡單文件上傳流程的實(shí)戰(zhàn)記錄
在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,下面這篇文章主要給大家介紹了關(guān)于JavaWeb實(shí)現(xiàn)簡單文件上傳流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
SpringBoot使用AOP+注解實(shí)現(xiàn)簡單的權(quán)限驗(yàn)證的方法
這篇文章主要介紹了SpringBoot使用AOP+注解實(shí)現(xiàn)簡單的權(quán)限驗(yàn)證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05

