外观
若依分离版集成达梦DM8数据库
本文将详细介绍如何将若依分离版集成达梦 DM8 数据库,确保顺利迁移数据、修改配置和执行相关操作。
1、数据迁移
迁移过程概述 首先,我们需要将现有的数据库和表迁移至 达梦 DM8 数据库。有关详细的迁移步骤,您可以参考达梦官方文档:达梦数据库迁移文档。
或者使用navite 工具进行数据库迁移,如下图配置,有关navicat连接达梦数据库的信息,参考 用Navicat连接达梦数据库

注意事项 迁移成功后,mysql中原有的自增字段设置,在达梦中无效,需要执行如下脚本:RYDB指的是达梦中的模式名
ALTER TABLE "RYDB"."SYS_CONFIG" ADD COLUMN "CONFIG_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_DEPT" ADD COLUMN "DEPT_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_DICT_DATA" ADD COLUMN "DICT_CODE" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_DICT_TYPE" ADD COLUMN "DICT_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_JOB" ADD COLUMN "JOB_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_JOB_LOG" ADD COLUMN "JOB_LOG_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_LOGININFOR" ADD COLUMN "INFO_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_MENU" ADD COLUMN "MENU_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_NOTICE" ADD COLUMN "NOTICE_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_OPER_LOG" ADD COLUMN "OPER_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_POST" ADD COLUMN "POST_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_ROLE" ADD COLUMN "ROLE_ID" IDENTITY(1, 1);
ALTER TABLE "RYDB"."SYS_USER" ADD COLUMN "USER_ID" IDENTITY(1, 1);如果你还有其他业务表需要处理,可使用以下脚本,来获取表名,以及第一个字段名,做相应的处理:
SELECT TABLE_NAME, COLUMN_NAME --, DATA_TYPE
FROM (
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE,ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY COLUMN_ID) AS rn
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'RYDB'
AND TABLE_NAME NOT IN ('SYS_ROLE_DEPT','SYS_ROLE_MENU','SYS_USER_CONTRACT','SYS_USER_POST','SYS_USER_ROLE')
)
WHERE rn = 1;2、添加依赖
为确保与达梦 DM8 数据库的兼容性,您需要在 ruoyi-admin 模块的 pom.xml 文件中添加以下两个依赖:
<!-- 达梦数据库 JDBC 驱动 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.1.49</version>
</dependency>
<!-- 达梦数据库 Hibernate 方言 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate5.3</artifactId>
<version>8.1.1.49</version>
</dependency>3、修改数据库配置
接下来,需要配置数据库连接。请编辑 ruoyi-admin 模块下的 application-druid.yml 文件,修改以下配置:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: dm.jdbc.driver.DmDriver
druid:
master:
url: jdbc:dm://192.168.100.100:5236?SCHEMA=SYSDBA
username: ry
password: 123456确保 url、username 和 password 与您自己的达梦 DM8 数据库配置相匹配。
4、调整分页配置
由于达梦 DM8 数据库在分页处理上与其他数据库略有不同,我们需要在 ruoyi-admin 模块的 application.yml 文件中进行分页相关的配置修改:
pagehelper:
helperDialect: oracle
supportMethodsArguments: true
params: count=countSql5、实现 find_in_set 函数
在达梦 DM8 中,find_in_set 函数的实现与 MySQL 不同,在部门管理的 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml 中,原代码使用了 find_in_set 函数,可替换为 instr 函数: 原代码:
find_in_set(#{deptId}, ancestors)修改后:
instr(','||ancestors||',' , ','|| #{deptId} ||',')6、修改 Mapper 文件
1. 修改 sysNoticeMapper.xml
在 ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml 文件中,将 cast() 函数替换为 to_char(),以确保与达梦 DM8 的兼容性:
<sql id="selectNoticeVo">
select notice_id, notice_title, notice_type, to_char(notice_content) as notice_content, status, create_by, create_time, update_by, update_time, remark
from sys_notice
</sql>2. 修改 SysMenuMapper.xml,以及其他mapper.xml文件中包含有 ` 的符号
在 ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml 文件中,删除所有多余的符号(比如 ` ),确保 SQL 语句格式清晰无误。
注意:若开发环境不使用达梦,则以下步骤可以忽略
3. 修改 GenTableMapper.xml
在 ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml 文件中: 原代码:
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
select table_name, table_comment, create_time, update_time from information_schema.tables
where table_schema = (select database())
...
</select>修改后:
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
select so.NAME table_name, st.COMMENT$ table_comment, so.CRTDATE create_time from SYS.SYSOBJECTS so
...
</select>
<sql id="selectDamengTableVo">
select
a.*,
b.commentas table_comment
from
(
select
SF_GET_SCHEMA_NAME_BY_ID(SCHID) AS schema_name,
name as table_name,
crtdate as create_time
from
sys.sysobjects
where
type = 'SCHOBJ'
and subType$ = 'UTAB'
and schid = CURRENT_SCHID
) a
left join
sys.systablecomments b on a.schema_name = b.schname and a.table_name = b.tvname and b.table_type = 'TABLE'
</sql>
<!-- 查询数据库表列表 -->
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
<include refid="selectDamengTableVo"></include>
<where>
a.table_name NOT LIKE 'QRTZ_%' AND a.table_name NOT LIKE 'GEN_%'
AND a.table_name NOT IN (select table_name from gen_table)
<if test="tableSchema != null and tableSchema != ''">
AND lower(a.table_schema) like lower(concat('%', #{tableSchema}, '%'))
</if>
<if test="tableName != null and tableName != ''">
AND lower(a.table_name) like lower(concat('%', #{tableName}, '%'))
</if>
</where>
order by create_time desc
</select>4. 修改 GenTableColumnMapper.xml
在 ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml 文件中,修改模式名为您的实际模式名:
<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
select
sc.NAME column_name,
(case when sc.INFO2 = 1 then '1' else '0' end) is_pk,
sc.COLID sort, scc.COMMENTcolumn_comment,
(case when sc.INFO2 = 1 then '1' else '0' end) as is_increment,
sc.TYPE column_type
from
sys.syscolumns sc
left join
SYS.SYSOBJECTS so on sc.ID = so.ID
left join SYS.SYSCOLUMNCOMMENTS SCC on sc.NAME = scc.COLNAME and scc.TABLE_TYPE = 'TABLE' and scc.SCHNAME = your_schema_name and scc.TVNAME= so.NAME
where
so.TYPE='SCHOBJ' and so.SUBTYPE='UTAB' and so.PID = -1
and SF_GET_SCHEMA_NAME_BY_ID(so.SCHID) = your_schema_name
and so.NAME = #{tableName}
</select>7、生成 SQL 脚本
在 ruoyi-generator/src/main/resources/vm/sql/sql.vm 文件中,确保生成的 SQL 脚本符合达梦数据库的格式要求。例如,生成菜单 SQL 的代码:
-- 菜单 SQL
insert into {tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}', '{parentMenuId}', '1', '{businessName}', '{moduleName}/{businessName}/index', 1, 0, 'C', '0', '0', '{permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '{functionName}菜单');
DECLARE
-- 按钮父菜单ID
parentId BIGINT := @@IDENTITY;
BEGIN
-- 按钮 SQL
insert into {tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}查询', parentId, '1', '#', '', 1, 0, 'F', '0', '0', '{permissionPrefix}:query','#', 'admin', sysdate(), '', null, '');
insert into{tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}新增', parentId, '2', '#', '', 1, 0, 'F', '0', '0', '{permissionPrefix}:add','#', 'admin', sysdate(), '', null, '');
insert into {tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}修改', parentId, '3', '#', '', 1, 0, 'F', '0', '0', '{permissionPrefix}:edit','#', 'admin', sysdate(), '', null, '');
insert into{tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}删除', parentId, '4', '#', '', 1, 0, 'F', '0', '0', '{permissionPrefix}:remove','#', 'admin', sysdate(), '', null, '');
insert into {tableSchema}.sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('{functionName}导出', parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export','#', 'admin', sysdate(), '', null, '');
END;8、总结
完成以上步骤后,您就可以成功地将若依分离版与达梦 DM8 数据库集成,实现数据迁移、配置修改和功能扩展。通过这些调整,您将能够充分发挥达梦数据库的性能优势,同时兼容若依框架的各项功能。
参考:
