• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

RuoYi项目适配达梦数据库一

武飞扬头像
清风xhp
帮助1

新项目使用了RuoYi框架(前后端不分离版,V4.7.5),且使用达梦数据库。本身SpringBoot项目修改数据库不是什么困难的事情,唯一有变数的可能就是国产数据库能查到的资料不是那么丰富;借着本次项目的修改过程,记录成文字,方便以后有迹可循。


一、JDBC依赖

  1. 根据以往使用达梦数据库的经验,达梦官方没提供Maven版的jdbc包,且网上的经验基本也是采用拿达梦数据库安装路径下的jar包去安装到本地Maven仓库的方式;总觉得本地安装jar包或者将jar包放入项目资源目录下的方式不爽,然后尝试到Maven仓库搜索了一下,居然存在,不确定是不是官方提供的;好吧,有就更方便了;
  2. 修改admin子模块的pom文件,将mysql-jdbc依赖换成dm-jdbc依赖;
  3. 修改文件如下:
    	<dependencies>
        
            <!-- 其他依赖省略 -->
            
            <!-- Mysql驱动包 -->
    <!--        <dependency>-->
    <!--            <groupId>mysql</groupId>-->
    <!--            <artifactId>mysql-connector-java</artifactId>-->
    <!--        </dependency>-->
    
            <!-- 达梦驱动包 -->
            <dependency>
                <groupId>com.dameng</groupId>
                <artifactId>Dm7JdbcDriver18</artifactId>
                <version>7.6.0.165</version>
            </dependency>
        </dependencies>
    
    学新通
  4. 注意jdbc包的版本:Dm7JdbcDriver18中7是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方言设置

  • 修改如下:
    # PageHelper分页插件
    pagehelper: 
      helperDialect: oracle
      supportMethodsArguments: true
      params: count=countSql 
    

四、适配DM不支持的SQL函数

  1. replace into函数:记录在线用户功能,SysUserOnlineMapper里的saveOnline 方法,用到了不支持的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,
    			              #{tatus} 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:部门管理,SysDeptMapper里用到了不支持的find_in_set函数,可替换成instr函数;

    • 示例如下:
    -- 原函数
    find_in_set(#{deptId}, ancestors)
    -- 新函数
    instr(','||ancestors||',' ,  ','|| #{deptId} ||',') 
    

五、注意事项

  1. char类型,长度由1变成4,读出的数据会补空,如‘1 ’,会引起系统显示/反填异常;

六、小结

  1. 至此,整个项目(代码生成模块除外)基本可以正常运行了,项目适配的第一阶段结束;
  2. sql函数问题可能存在未发现的,只能遇到再修改;
  3. 代码生成模块需要读取数据库的表结构等信息,改动较大,暂未进行;需先查找一下DM的相关资料,不知道是否可行;如果能够适配的话,会另外记录一篇。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaaaeb
系列文章
更多 icon
同类精品
更多 icon
继续加载