2022-01-19
Java开发
0

目录

一. 需要注意的事项
1.1. MySQL迁移数据时要注意的事项
二. 人大金仓(KingbaseES V8 R6)
2.1 下载
2.2. 配置
三. 达梦数据库(dm8)
3.1. 下载
3.2. 数据库需要新建 `findinset` 的函数
3.3. 配置
四. 神通数据库(ShenTong7.0)
4.1. 下载
4.2. 配置
五. 南大通用(GBase 8s V8.8)
5.1. 下载
5.2. 配置
5.3. 注意事项
1. 数据库需要新建 `findinset` 的函数
2. concat不支持超过3个字符的拼接(`concat('%', #{itemName}, '%')`)。
3. MyBatis的mapper针对不同数据库的语句实现
4. 常用函数、表达式

一. 需要注意的事项

1.1. MySQL迁移数据时要注意的事项

MySQL表中如果字段类型是char,并且值的长度未达到char设定的长度,那么在做国产化数据库迁移时,会被空值补齐。针对这种情况,有两种解决办法。

方法一:迁移前,先将MySQL的字段类型进行修改,可以通过以下方式生成更新语句:

sql
SELECT CONCAT( 'ALTER TABLE `【数据库名】`.', TABLE_NAME, ' MODIFY ', COLUMN_NAME, ' VARCHAR(', CHARACTER_MAXIMUM_LENGTH, ');' ) 'sql' FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='【数据库名】' AND DATA_TYPE = 'char';

方法二:使用国产化数据库迁移软件时,设定以下类型转换 人大金仓的配置: file

二. 人大金仓(KingbaseES V8 R6)

2.1 下载

下载地址:https://www.kingbase.com.cn/download/c_id/455.html

2.2. 配置

引入驱动包

com.esen.jdbc kingbase8 8.6.0

application.yml的配置

driverClassName是: com.kingbase8.Driver 数据库连接地质是:jdbc:kingbase8://ip:54321/dbname

其他配置:

yml
# Page Helper配置需要指定方言 pagehelper: # 方 言 helperDialect: postgresql # 需要指定数据库的模式和数据库类别, lawyee: database: db-schema: 模式名 db-type: kingbase8

三. 达梦数据库(dm8)

3.1. 下载

下载地址:https://www.dameng.com/view_61.html

3.2. 数据库需要新建 find_in_set 的函数

sql
CREATE OR REPLACE FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',') RETURN NUMBER IS l_idx number:=0; -- 用于计算piv_str2中分隔符的位置 str varchar2(500); -- 根据分隔符截取的子字符串 piv_str varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str res number:=0; -- 返回结果 loopIndex number:=0; BEGIN -- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1 IF instr(piv_str, p_sep, 1) = 0 THEN IF piv_str = piv_str1 THEN res:= 1; END IF; ELSE -- 循环按分隔符截取piv_str LOOP l_idx := instr(piv_str,p_sep); loopIndex:=loopIndex+1; -- 当piv_str中还有分隔符时 IF l_idx > 0 THEN -- 截取第一个分隔符前的字段str str:= substr(piv_str,1,l_idx-1); -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断 IF str = piv_str1 THEN res:= loopIndex; EXIT; END IF; piv_str := substr(piv_str,l_idx+length(p_sep)); ELSE -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1 IF piv_str = piv_str1 THEN res:= loopIndex; END IF; -- 无论最后是否相等,都跳出循环 EXIT; END IF; END LOOP; -- 结束循环 END IF; -- 返回res RETURN res; END FIND_IN_SET;

3.3. 配置

引入驱动包

com.dameng DmJdbcDriver18 8.1.1.193

application.yml的配置

driverClassName是: dm.jdbc.driver.DmDriver 数据库连接地质是:jdbc:dm://ip:54321/dbname

其他配置:

yml
# Page Helper配置需要指定方言 pagehelper: # 方 言 helperDialect: oracle # 需要指定数据库的模式和数据库类别, lawyee: database: db-schema: 模式名 db-type: dm

四. 神通数据库(ShenTong7.0)

4.1. 下载

试用版下载地址:http://www.shentongdata.com/index.php/download/list-27

4.2. 配置

引入驱动包

com.shentong.jdbc oscarJDBC8 18

application.yml的配置

driverClassName是: com.oscar.Driver 数据库连接地质是:jdbc:oscar://ip:2003/dbname

其他配置:

yml
# Page Helper配置需要指定方言 pagehelper: # 方 言 helperDialect: # 需要指定数据库的模式, lawyee: database: db-schema: 模式名

五. 南大通用(GBase 8s V8.8)

5.1. 下载

无数据库下载地址。 相关工具下载地址:https://gbasedbt.com/index.php/gbase8s_tools.html

5.2. 配置

引入驱动包

com.gbase.dbdriver gbasedbtjdbc 3.3.0_2_36477d

application.yml的配置

driverClassName是: com.gbasedbt.jdbc.Driver 数据库连接地质是:jdbc:gbasedbt-sqli://[ip]:9088/[dbname]:GBASEDBTSERVER=[server name];DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=30

其他配置:

yml
# 需要指定数据库的类型, lawyee: database: db-type: gbasedbt-sqli

5.3. 注意事项

1. 数据库需要新建 find_in_set 的函数

参考:https://gbasedbt.com/index.php/archives/136/

drop function if exists find_in_set; create function find_in_set(str varchar(255),strlist lvarchar(10000)) returns int; define currp int; -- 当前位置 define lastp int; -- 上次位置 define sepnum int; define strlen int; define strtmp lvarchar(10000); let lastp = 1; let sepnum = 0; let strtmp = strlist || ","; -- 追加一个分隔符',' let strlen = length(strtmp); FOR currp = 1 TO strlen IF substr(strtmp,currp,1) = ',' THEN let sepnum = sepnum + 1; IF substr(strtmp,lastp,currp - lastp) = str THEN RETURN sepnum; END IF; let lastp = currp + 1; END IF; END FOR; RETURN 0; end function;

2. concat不支持超过3个字符的拼接(concat('%', #{itemName}, '%'))。

在MyBatis的mapper中,尽量不要写成 concat('%', #{itemName}, '%')。 可以使用 '%${itemName}%' (使用${}编写会存在sql注入的风险,需要注意处理.)。

3. MyBatis的mapper针对不同数据库的语句实现

使用 databaseId="gbasedbt-sqli"

insert into sys_role_power ( id, role_id, power_id, data_scope ) values (#{item.id}, #{item.roleId}, #{item.powerId}, #{item.dataScope}) insert into sys_role_power ( id, role_id, power_id, data_scope ) values (#{item.id}, #{item.roleId}, #{item.powerId}, #{item.dataScope})

4. 常用函数、表达式

https://gbasedbt.com/index.php/archives/216/

本文作者:wucc

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!