当前位置: 代码网 > it编程>编程语言>Java > SpringBoot项目整合达梦数据库详解(MYSQL转换达梦数据库)

SpringBoot项目整合达梦数据库详解(MYSQL转换达梦数据库)

2025年03月10日 Java 我要评论
一、达梦数据库的安装和使用1、达梦数据库下载产品下载 | 达梦数据库2、windows环境安装达梦数据库参考文章:windows环境安装达梦数据库_达梦数据库安装二、mysql数据库 迁移至 达梦数据

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

1、达梦数据库下载

产品下载 | 达梦数据库

2、windows环境安装达梦数据库

参考文章: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整合达梦数据库的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com