一、达梦数据库的安装和使用
1、达梦数据库下载

2、windows环境安装达梦数据库
二、mysql数据库 迁移至 达梦数据库
参考文章:mysql数据迁移至达梦数据库
在安装的tool目录下,查找相关的工具:

1、dm控制台工具:console

服务器配置又该有两种方式:①dm控制台工具修改;②配置文件修改。
方法一:服务器配置:设置系统兼容性(dm控制台工具),兼容mysql

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

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

(3)重启dameng服务

2、dm数据迁移工具:dts

在这里操作:mysql数据迁移至达梦数据库

注意:当迁移过程中出现下面问题时,如有触发器或者外键,需要先关掉触发器和外键,然后进行迁移,不然会导致迁移失败。

mysql的数据表转换成dm的数据表时,点击转换按钮。如下:

设置【1:迁移策略选项】

设置【2:列映射选项】

3、添加用户:如果导入的dm数据库需要和mysql的用户一样,添加root用户。


三、spring项目整合达梦数据库
1、配置java项目连接达梦,切换数据连接驱动

2、maven导入达梦数据库驱动包

3、表的实体类映射。【访问形式:模式名.表名】

4、xml文件:查询表【模式名.表名】

5、mysql字段类型与dm数据类型的转换。【dm:达梦数据库】
package com.company.common.core.annotation;
/**
* 数据库类型
*
* @author kally
* @date 2023/12/13
*/
public enum dbtype {
/**
* 数据库类型(类型,描述)
*/
mysql("mysql", "mysql数据库"),
mariadb("mariadb", "mariadb数据库"),
oracle("oracle", "oracle11g及以下数据库(高版本推荐使用oracle_new)"),
oracle_12c("oracle12c", "oracle12c+数据库"),
db2("db2", "db2数据库"),
h2("h2", "h2数据库"),
hsql("hsql", "hsql数据库"),
sqlite("sqlite", "sqlite数据库"),
postgre_sql("postgresql", "postgre数据库"),
sql_server2005("sqlserver2005", "sqlserver2005数据库"),
sql_server("sqlserver", "sqlserver数据库"),
dm("dm", "达梦数据库"),
xu_gu("xugu", "虚谷数据库"),
kingbase_es("kingbasees", "人大金仓数据库"),
phoenix("phoenix", "phoenix hbase数据库"),
gauss("zenith", "gauss 数据库"),
click_house("clickhouse", "clickhouse 数据库"),
gbase("gbase", "南大通用(华库)数据库"),
gbase_8s("gbase-8s", "南大通用数据库 gbase 8s"),
@deprecated
gbasedbt("gbasedbt", "南大通用数据库"),
@deprecated
gbase_informix("gbase 8s", "南大通用数据库 gbase 8s"),
sinodb("sinodb", "星瑞格数据库"),
oscar("oscar", "神通数据库"),
sybase("sybase", "sybase ase 数据库"),
ocean_base("oceanbase", "oceanbase 数据库"),
firebird("firebird", "firebird 数据库"),
high_go("highgo", "瀚高数据库"),
cubrid("cubrid", "cubrid数据库"),
goldilocks("goldilocks", "goldilocks数据库"),
csiidb("csiidb", "csiidb数据库"),
sap_hana("hana", "sap_hana数据库"),
impala("impala", "impala数据库"),
vertica("vertica", "vertica数据库"),
xcloud("xcloud", "行云数据库"),
redshift("redshift", "亚马逊redshift数据库"),
opengauss("opengauss", "华为 opengauss 数据库"),
tdengine("tdengine", "tdengine数据库"),
informix("informix", "informix数据库"),
uxdb("uxdb", "优炫数据库"),
lealone("lealone", "lealone数据库"),
other("other", "其他数据库");
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;
}
/**
* 数据库类型
*
* @param db 数据库
* @param desc 描述
*/
private dbtype(final string db, final string desc) {
this.db = db;
this.desc = desc;
}
}
6、达梦数据库分页插件


7、sql适配关键字列名
mysql使用反引号来区分列名和关键字;达梦数据库使用双引号来区分;实体类映射字段之前的修改。
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) {
// 使用达梦数据库
if (arrays.tostring(properties.getmapperlocations()).contains("dm")) {
log.info("使用达梦数据库");
//实体类的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数据库");
}
}
}
package com.company.common.framework.mybatis;
import com.baomidou.mybatisplus.autoconfigure.mybatisplusproperties;
/**
* mybatispluspropertiescustomizer 用于在读取 properties 之后进行一些自定义操作
*
* @author kally
* @date 2023/12/13
*/
public interface mybatispluspropertiescustomizer {
/**
* mysql中我们使用反引号来区分列名和关键字;但在达梦数据库中,使用双引号来区分。
* 而如果创建实体类在注解 @tablefield 中使用了反引号例如 @tablefield(`range`),
* 这种我们改了的话,mysql 就用不了,不改达梦就用不了。所以从代码入手,在启动时用反射修改值。
* 达梦数据库某些关键字例如 audit,在 mysql 中不是关键字的,需要手动设置 @tablefield(`audit`)。
*/
/**
* mybatispluspropertiescustomizer 用于在读取 properties 之后进行一些自定义操作
*
* @param properties {@link mybatisplusproperties}
*/
void customize(mybatisplusproperties properties);
}
以上就是springboot项目整合达梦数据库详解(mysql转换达梦数据库)的详细内容,更多关于springboot整合达梦数据库的资料请关注代码网其它相关文章!
发表评论