【开发心得】springboot+mybatis对接翰高数据库及mysql数据库迁移

前言


  随着S3赛季的开启,信创化之路愈发加紧。国内出现了很多基于社区版mysql或者pgsql的优化版本的国产数据库。本文提到的翰高数据库基于pgsql实现(如存争议,可删除)。
引用某度百科的原文简介:

瀚高数据库引进了国际上最先进的开源数据库PostgreSQL内核技术,在此PostgreSQL社区版之上做了一系列的研发和优化。瀚高科技是中国最早致力于PostgreSQL数据库商业推广使用的专业化公司,在数据库方面有着丰富的开发、管理和培训经验。瀚高数据平台解决方案既可以为用户节约大量的数据库使用成本,又可以为用户提供专业化的数据服务,从而整体提高用户IT部门的数据库使用水平。

资源分享

迁移工具与可视化客户端分享,见文末。

工程对接(SpringBoot+Mybatis为例)

(1) pom依赖

<!-- https://mvnrepository.com/artifact/com.highgo/HgdbJdbc -->
<dependency>
	<groupId>com.highgo</groupId>
	<artifactId>HgdbJdbc</artifactId>
	<version>6.2.4</version>
</dependency>

 (2) 数据库jdbc连接

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.highgo.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:highgo://实际ip:实际端口号/库名(这里相当于名称空间)?currentSchema=约束名(mysql的数据库名),public&stringtype=unspecified&serverTimezone=Asia/Shanghai
                username: 用户名
                password: 密码
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url:
                username:
                password:
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置连接超时时间
            connectTimeout: 30000
            # 配置网络超时时间
            socketTimeout: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1
            testWhileIdle: false
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: 控制台用户名
                login-password: 密码
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true
数据库迁移

(1) 从mysql 迁移

工具:  migration-4.1.4-2024-08-09(翰高提供,侵删)

解压zip后,找到migration/bin 点击start.bat或者对应cpu位数的exe程序。

主界面

新建组 

在组中新建翰高和mysql的连接(其他也可以)

新建迁移任务

选择源和目标

 选择范围,下一步下一步即可。

迁移过程中,工具给我们做了很多兼容。如果你的翰高数据库开启了mysql模式,并且执行这个工具的话,他会自动创建sequence,兼容mysql自增id的实现。

可视化工具连接数据库
1. 企业版安全版

这个版本好像默认开启了SM3(国密3)的认证,因为我对接的版本是dba提供的,具体没有看到配置。

如果开启国密版本的认证了,那么navicat, sqlyog等工具默认是不支持的。

会报错: authentication method 13 not supported

网上据说有sm3的dll插件,可以给到navicat,至少我没找到免费的下载连接。

这种情况,请使用dbeaver或者datagrip,这俩工具是支持自定义jar驱动的。

higo驱动中有sm3的痕迹,具体源码没有debug

那么就有机会了

 第一种方式 dbeaver 自定义驱动连接翰高数据库。

(1) 打开dbeaver,数据库-驱动管理器

(2) 驱动管理器-新建

(3) 填写连接模板

连接瀚高数据库:highgo

类名:com.highgo.jdbc.Driver
URL :jdbc:highgo://{host}[:{port}]/[{database}]

下载并且加载驱动

https://mavenlibs.com/jar/file/com.highgo/HgdbJdbc

创建完之后,其他和新建正常的sql连接没有多大区别。

 

连接成功后,dbeaver的结构,会在外部库名(可以理解为名称空间)的基础上,还有一个"schema"名称(相当于mysql的数据库名称),然后才是表名,对于熟悉oracle或者pgsql的小伙伴可能友好,但对于使用mysql和其他数据库的小伙伴有点别扭。

 

第二种方式,直接使用翰高的 hgdbdeveloper-6.1.0-2024-04-22.zip(翰高提供,侵删)

新建连接(注意,这里勾选是否为安全版,应该和使用使用sm3加密链接库有关系)

连接后的截图,其他和使用dbever一类的数据库类似。

2. 未开启国密版本。

当作pgsql直接连接即可,有其他博客表明,可以用navicat一类的工具直接连接。

Mysql函数或语法兼容

函数直接创建出来就好

1. ifnull

create function ifnull(value anyelement, null_value anyelement) RETURNS anyelement AS 
$$ 
BEGIN 
  if value is null then return null_value;
  else return value;
  end if;
END; 
$$ 
LANGUAGE plpgsql;

2. find_in_set

CREATE OR REPLACE FUNCTION find_in_set(value text, col_name text)
RETURNS boolean AS $$
BEGIN
  RETURN value = ANY(string_to_array(col_name, ','));
END;
$$ LANGUAGE plpgsql;

语法兼容


(1)pgsql有较强的语法验证:
operator does not exist: character = integer 解决方案,根据对应的报错提示去找字符和数字等的转换支持(mysql对比比较不敏感)

查看当前采用的模式:
alter system set  compatible_db = 'mysql';
select pg_reload_conf();

(2) 自增id

举例子:

创建序列

CREATE SEQUENCE my_table_id_seq;

使表关联对应序列
CREATE TABLE my_table (
    id INTEGER PRIMARY KEY DEFAULT NEXTVAL('my_table_id_seq'),
    name VARCHAR(100),
    data TEXT
);

可选,修改序列起点。(一般不直接修改,如果多次执行迁移工具的迁移,sequence并没有触发自增,最好是删除sequence重建)。

alter sequence s_seq restart with 2

(3) mybatis字段兼容

PSQLException: ERROR: could not determine data type of parameter $1

like concat('%', #{deptName}::text, '%')

资源链接(免责侵删): 

migration-4.1.......等2个文件官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供migration-4.1.......等2个文件最新版正式版官方版绿色版下载,migration-4.1.......等2个文件安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装icon-default.png?t=O83Ahttps://www.123865.com/s/07O0Vv-2V47A?提取码:mT26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值