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)換。【DM:達(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)文章
java面試題之try中含return語句時代碼的執(zhí)行順序詳解
這篇文章主要介紹了關(guān)于java中的一道面試題,這套題就是在try中含return語句時代碼的執(zhí)行順序,這個問題看似簡單,卻暗藏殺機(jī)??!文中通過一個個例子詳細(xì)介紹了其中玄機(jī),需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04
SpringSecurity在單機(jī)環(huán)境下使用方法詳解
本文詳細(xì)介紹了SpringSecurity和SpringBoot的整合過程,包括配置用戶認(rèn)證、JSP頁面的使用、數(shù)據(jù)庫認(rèn)證以及授權(quán)功能的實(shí)現(xiàn),感興趣的朋友一起看看吧2025-02-02
SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析
這篇文章主要為大家介紹了SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
淺談@RequestParam 參數(shù)是否必須傳的問題
這篇文章主要介紹了淺談@RequestParam 參數(shù)是否必須傳的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
springboot的controller中如何獲取applicatim.yml的配置值
本文介紹了在SpringBoot的Controller中獲取application.yml配置值的四種方式,并舉例說明了每種方式的使用場景和優(yōu)缺點(diǎn),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-12-12

