当前位置: 首页 > article >正文

若依未分离版集成达梦数据库

文章目录

  • 一、数据库和表的迁移
  • 二、配置依赖
  • 三、数据库连接池配置
  • 四、PageHelper 分页插件设置
  • 五、适配达梦数据库不支持的 SQL 函数
    • 1. 替换 replace into 为 merge into
    • 2. 替换 find_in_set 为 instr
  • 六、修改 Mapper 配置
    • 1. 修改表定义信息的 SQL
    • 2. 修改列定义信息的 SQL
  • 七、工具类修改
    • 1. 修改 GenConstants
    • 2. 修改 GenUtils

本文讲述在 RuoYi 框架中整合达梦(DM)数据库的操作,涵盖了从数据库迁移、依赖配置、SQL 函数适配到工具类代码修改的全过程。

一、数据库和表的迁移

首先需要将原有数据库和表迁移到达梦数据库。可以参考达梦官网提供的 MySQLDM 数据库迁移文档:https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html了解更多操作细节。

二、配置依赖

ruoyi-admin 模块的 pom.xml 文件中,移除 MySQLJDBC 依赖,并引入达梦的 JDBC 依赖

具体操作:

  1. 找到 <dependencies> 部分。
  2. mysql-connector-java 的依赖替换为 Dm8JdbcDriver18
<dependencies>
    <!-- 其他依赖省略 -->
    <!-- MySQL 驱动包(删除) -->
    <!--
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    -->
    
    <!-- 达梦驱动包(新增) -->
    <dependency>
        <groupId>com.dameng</groupId>
        <artifactId>Dm8JdbcDriver18</artifactId>
        <version>8.1.1.49</version>
    </dependency>
</dependencies>

注意:Dm8JdbcDriver18 中的 8 表示 DM 数据库版本,18 表示 JDK 版本。

三、数据库连接池配置

修改数据库连接的配置文件,确保达梦数据库的相关参数正确。

配置示例:

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: dm.jdbc.driver.DmDriver
        druid:
            # 主库数据源配置
            master:
                url: jdbc:dm://[ip]:[port]
                username: SYSDBA
                password: ***

四、PageHelper 分页插件设置

将分页插件 PageHelperhelperDialect 设置为 oracle,以适配达梦数据库的方言。

配置示例:

pagehelper:
  helperDialect: oracle
  supportMethodsArguments: true
  params: count=countSql

五、适配达梦数据库不支持的 SQL 函数

达梦数据库不支持部分 MySQLSQL 函数,需进行适配。

1. 替换 replace into 为 merge into

在记录在线用户功能中,SysUserOnlineMappersaveOnline 方法使用了 replace into,可以改为 merge into 语句:

原代码:

<insert id="saveOnline" parameterType="SysUserOnline">
    replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
    values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
</insert>

修改后:

<insert id="saveOnline" parameterType="SysUserOnline">
	merge into sys_user_online
		using (select #{sessionId} sessionId, #{loginName} login_name, #{deptName} dept_name, #{ipaddr} ipaddr, #{loginLocation} login_location, #{browser} browser, #{os} os,
			              #{status} status, #{startTimestamp} start_timestamp, #{lastAccessTime} last_access_time, #{expireTime} expire_time from dual) d
			on sys_user_online.sessionId = d.sessionId
			when matched then
				update set sys_user_online.login_name = d.login_name, sys_user_online.dept_name = d.dept_name, sys_user_online.ipaddr = d.ipaddr,
				    sys_user_online.login_location = d.login_location, sys_user_online.browser = d.browser, sys_user_online.os = d.os, sys_user_online.status = d.status,
				    sys_user_online.start_timestamp = d.start_timestamp, sys_user_online.last_access_time = d.last_access_time, sys_user_online.expire_time = d.expire_time
			when not matched then
				insert (sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
				    values(d.sessionId, d.login_name, d.dept_name, d.ipaddr, d.login_location, d.browser, d.os, d.status, d.start_timestamp, d.last_access_time, d.expire_time)
</insert>

2. 替换 find_in_set 为 instr

在部门管理的 SysDeptMapper 中,原代码使用了 find_in_set 函数,可替换为instr 函数

原代码:

find_in_set(#{deptId}, ancestors)

修改后:

instr(','||ancestors||',' , ','|| #{deptId} ||',')

六、修改 Mapper 配置

1. 修改表定义信息的 SQL

GenTableMapper.xml 中,调整获取表定义信息的查询 SQL

原代码:

<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>

2. 修改列定义信息的 SQL

GenTableColumnMapper.xml 中,更新获取列定义信息的 SQL

原代码:

<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
	select column_name, is_nullable, column_key, ordinal_position, column_comment, extra, column_type 
	from information_schema.columns where ...
</select>

修改后:

<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
    select sc.NAME column_name, sc.NULLABLE$, sc.INFO2, sc.COLID, scc.COMMENT$, LOWER(sc.TYPE$) column_type
    ...
</select>

七、工具类修改

为适配达梦数据库,需对 GenConstantsGenUtils 工具类进行调整。

1. 修改 GenConstants

GenConstants.java 中添加对浮点型和整型的判断常量:

public class GenConstants {
    ...
    /** 浮点数 */
    public static final String[] COLUMNTYPE_NUMBER_DOUBLE = { "number", "float", "double", "decimal" };
    /** 整型 */
    public static final String[] COLUMNTYPE_NUMBER_INTEGER = { "tinyint", "smallint", "mediumint", "int", "integer", "bit" };
    ...
}

2. 修改 GenUtils

GenUtils.java 中调整对浮点数和整型数据类型的判断逻辑:

public class GenUtils {
    ...
    public static void initColumnField(GenTableColumn column, GenTable table) {
        ...
        if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) {
            column.setHtmlType(GenConstants.HTML_INPUT);
            // 浮点型使用 Double
            if (arraysContains(GenConstants.COLUMNTYPE_NUMBER_DOUBLE, dataType)) {
                column.setJavaType(GenConstants.TYPE_DOUBLE);
            }
            // 整型
            else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER_INTEGER, dataType)) {
                column.setJavaType(GenConstants.TYPE_INTEGER);
            }
            // 长整型
            else {
                column.setJavaType(GenConstants.TYPE_LONG);
            }
        }
        ...
    }
}

通过上述步骤,RuoYi 框架即可顺利切换至达梦数据库,确保系统稳定运行。


http://www.kler.cn/a/384868.html

相关文章:

  • C++异常:基本语法
  • 深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架
  • 基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
  • [linux]docker基础
  • uniapp 下拉选择器picker
  • 从配置anaconda到配置pycharm
  • C#笔记 —— 事件
  • 第3章 CentOS系统管理
  • ssm063基于SSM框架的德云社票务系统的设计与实现+vue(论文+源码)_kaic
  • vue3 element-plus el-scrollbar 自动滚动
  • Webserver(5.5)解析HTTP请求报文
  • 在PHP中使用UTF-8编码防止乱码需要注意以下几点‌:
  • vue种ref跟reactive的区别?
  • VisionPro —— CogIPOneImgeTool工具详解
  • 【论文速读】| RePD:通过基于检索的提示分解过程防御越狱攻击
  • 10.Node.js连接MongoDb
  • vue3 ts 实现一个下载数据功能(基本功能组件)
  • python下载pdf
  • 【大数据学习 | kafka高级部分】kafka的kraft集群
  • nginx平滑重启和php-fpm平滑重启