开发者

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

目录
  • 一、达梦数据库的安装和使用
    • 1、达梦数据库下载
    • 2、Windows环境安装达梦数据库
  • 二、mysql数据库 迁移至 达梦数据库
    • 1、DM控制台工具:Console
    • 2、DM数据迁移工具:DTS
  • 三、Spring项目整合达梦数据库

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

    1、达梦数据库下载

    产品下载 | 达梦数据库

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

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

    参考文章:Windows环境安装达梦数据库_达梦数据库安装

    二、MYSQL数据库 迁移至 达梦数据库

    参考文章:MySQL数据迁移至达梦数据库

    在安装的tool目录下,查找相关的工具:

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

    1、编程客栈DM控制台工具:Console

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

    服务器配置又该有两种方式:①DM控制台工具修改;②配置文件修改。

    方法一:服务器配置:设置系统兼容性(DM控制台工具),兼容MySQL

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

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

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

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

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

    (3)重启Dameng服务

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

    2、DM数据迁移工具:DTS

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

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

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

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

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

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

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

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

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

    设置【2:列映射选项】

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

    3、添加用户:如果导入的DM数据库需要和MYSQL的用户一样,添加ROOT用户。

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

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

    三、Spring项目整合达梦数据库

    1、配置Java项目连接达梦,切换数据连接驱动

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

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

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

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

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

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

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

    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
        GBAShttp://www.devze.comE_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、达梦数据库分页插件

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

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

    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(cQWfzxNT)).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 (tableFicQWfzxNTeld != 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 Mywww.devze.combatisPlusPropertiesCustomizer {
        /**
         * mysql中我们使用反引号来区分列名和关键字;但在达梦数据库中,使用双引号来区分。
         * 而如果创建实体类在注解 @TableField 中使用了反引号例如 @TableField(`range`),
         * 这种我们改了的话,mysql 就用不了,不改达梦就用不了。所以从代码入手,在启动时用反射修改值。
         * 达梦数据库某些关键字例如 audit,在 mysql 中不是关键字的,需要手动设置 @TableField(`audit`)。
         */
    
        /**
         * MybatisPlusPropertiesCustomizer 用于在读取 properties 之后进行一些自定义操作
         *
         * @param properties {@link MybatisPlusProperties}
         */
        void customize(MybatisPlusProperties properties);
    }
    

    以上就是SpringBoot项目整合达梦数据库详解(MYSQL转换达梦数据库)的详细内容,更多关于SpringBoot整合达梦数据库的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜