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

SpringBoot + RuoYi + 达梦数据库整合实战:一份完整的application.yml配置清单与SQL改写手册

SpringBoot + RuoYi + 达梦数据库整合实战:一份完整的application.yml配置清单与SQL改写手册

当国产化替代成为技术选型的重要考量,达梦数据库作为国产数据库的代表之一,正在越来越多地进入企业级应用场景。本文将手把手带你完成SpringBoot+RuoYi框架与达梦数据库的深度整合,从驱动配置到SQL方言适配,提供可直接用于生产环境的完整解决方案。

1. 环境准备与依赖配置

在开始整合前,需要确认几个关键环境要素:

  • JDK版本:达梦7.x推荐使用JDK 1.8
  • SpringBoot版本:2.5.x及以上
  • RuoYi版本:4.7.5(前后端不分离版)

1.1 Maven依赖配置

首先修改项目的pom.xml文件,移除MySQL依赖,添加达梦官方JDBC驱动。值得注意的是,达梦驱动现在已正式入驻Maven中央仓库,无需手动安装本地依赖:

<dependency> <groupId>com.dameng</groupId> <artifactId>Dm7JdbcDriver18</artifactId> <version>7.6.0.165</version> </dependency>

驱动命名规则解析:

  • Dm7:代表达梦数据库主版本号
  • JdbcDriver18:表示兼容JDK 1.8

提示:生产环境建议固定驱动版本号,避免自动升级带来的兼容性问题

2. 数据源与连接池配置

2.1 基础数据源配置

在application.yml中配置Druid连接池与达梦数据库连接参数:

spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: dm.jdbc.driver.DmDriver url: jdbc:dm://127.0.0.1:5236/SYSDBA?schema=你的模式名 username: SYSDBA password: DAMENG123 druid: initial-size: 5 min-idle: 5 max-active: 20 max-wait: 60000

关键参数说明:

参数必填说明
schema达梦需要明确指定schema
zeroDateTimeBehavior无需配置(与MySQL不同)
serverTimezone达梦使用数据库服务器时区

2.2 连接池优化建议

针对达梦特性推荐的Druid配置:

druid: validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 filters: stat,wall

3. MyBatis与分页插件配置

3.1 MyBatis适配配置

达梦兼容Oracle语法,需要调整MyBatis配置:

mybatis: mapper-locations: classpath*:mapper/**/*.xml type-aliases-package: com.ruoyi.**.domain configuration: map-underscore-to-camel-case: true default-fetch-size: 100 default-statement-timeout: 30

3.2 PageHelper分页配置

达梦需要使用Oracle方言:

pagehelper: helper-dialect: oracle reasonable: true support-methods-arguments: true params: count=countSql

4. SQL语法适配与改写实战

4.1 常见不兼容语法改写

REPLACE INTO → MERGE INTO

RuoYi中记录在线用户功能需要改写:

<!-- 原MySQL语法 --> <insert id="saveOnline"> REPLACE INTO sys_user_online(sessionId, login_name...) VALUES (#{sessionId}, #{loginName}...) </insert> <!-- 达梦改写后 --> <insert id="saveOnline"> MERGE INTO sys_user_online t USING (SELECT #{sessionId} sessionId... FROM DUAL) s ON (t.sessionId = s.sessionId) WHEN MATCHED THEN UPDATE SET t.login_name = s.login_name... WHEN NOT MATCHED THEN INSERT (sessionId, login_name...) VALUES (s.sessionId, s.login_name...) </insert>
FIND_IN_SET → INSTR

部门树查询适配:

-- 原语法 FIND_IN_SET(#{deptId}, ancestors) -- 达梦语法 INSTR(','||ancestors||',', ','||#{deptId}||',') > 0

4.2 其他常见适配场景

  1. LIMIT语法

    -- MySQL SELECT * FROM table LIMIT 10 -- 达梦 SELECT * FROM table WHERE ROWNUM <= 10
  2. 日期函数

    -- MySQL DATE_FORMAT(create_time, '%Y-%m-%d') -- 达梦 TO_CHAR(create_time, 'YYYY-MM-DD')
  3. 自增主键处理

    <insert id="insertUser" useGeneratedKeys="false"> <selectKey keyProperty="userId" resultType="java.lang.Long" order="BEFORE"> SELECT USER_ID_SEQ.NEXTVAL FROM DUAL </selectKey> INSERT INTO sys_user(user_id, ...) VALUES(#{userId}, ...) </insert>

5. 生产环境注意事项

5.1 字符类型处理

达梦的CHAR类型与MySQL有显著差异:

  • CHAR(1)实际占用4字节
  • 读取时会自动填充空格
  • 建议改用VARCHAR2类型

5.2 事务隔离级别

达梦默认使用READ COMMITTED隔离级别,与MySQL的REPEATABLE READ不同,需要注意:

spring: datasource: druid: default-transaction-isolation: 2 # READ_COMMITTED

5.3 监控与调优

推荐配置的监控参数:

management: endpoints: web: exposure: include: druid,health,info endpoint: health: show-details: always

达梦特有的性能视图查询示例:

-- 查看当前会话 SELECT * FROM V$SESSION; -- 查看锁等待 SELECT * FROM V$LOCK WHERE BLOCK = 1;

6. 代码生成器适配

RuoYi的代码生成模块需要特殊处理:

  1. 修改数据源查询SQL:

    -- 原MySQL表查询 SELECT table_name, table_comment FROM information_schema.tables -- 达梦改写 SELECT TABLE_NAME as table_name, COMMENTS as table_comment FROM ALL_TAB_COMMENTS WHERE OWNER = '你的模式名'
  2. 列查询语句调整:

    SELECT a.COLUMN_NAME as column_name, a.DATA_TYPE as data_type, b.COMMENTS as column_comment FROM ALL_TAB_COLUMNS a LEFT JOIN ALL_COL_COMMENTS b ON a.TABLE_NAME = b.TABLE_NAME AND a.COLUMN_NAME = b.COLUMN_NAME WHERE a.TABLE_NAME = #{tableName}
  3. 修改GenTableServiceImpl中的数据库类型判断逻辑:

    // 将MySQL类型映射改为达梦类型 private static final Map<String, String> JDBC_TYPE_MAP = new HashMap<>(); static { JDBC_TYPE_MAP.put("VARCHAR2", "String"); JDBC_TYPE_MAP.put("NUMBER", "BigDecimal"); // 其他类型映射... }

7. 常见问题排查指南

连接超时问题

# 增加连接超时参数 url: jdbc:dm://127.0.0.1:5236/SYSDBA?socketTimeout=30000&connectTimeout=5000

中文乱码解决方案

# 连接字符串追加编码参数 url: jdbc:dm://127.0.0.1:5236/SYSDBA?charsetEncoding=UTF-8

批量插入优化

// 使用达梦特有的批量语法 @Update({ "BEGIN", "INSERT ALL", "<foreach collection='list' item='item'>", "INTO table_name(col1,col2) VALUES(#{item.val1},#{item.val2})", "</foreach>", "SELECT 1 FROM DUAL;", "END;"}) void batchInsert(List<Entity> list);

经过这些配置和改造后,RuoYi系统应该能够稳定运行在达梦数据库上。实际项目中,我们还遇到过达梦的CLOB类型处理、索引命名规则差异等问题,都需要根据具体业务场景进行调整。

http://www.rkmt.cn/news/1415909.html

相关文章:

  • 超越基础:为你的Unity小地图加入高级功能(雷达扫描、迷雾探索、多目标标记)
  • 系统性能调优实战:JVM与应用优化
  • Linux内核开发者视角:深入PCIe AER驱动与Firmware First模型的交互与优化
  • 基于Arduino与蓝牙模块的智能小车制作:从硬件组装到代码调试全流程
  • 告别Win10资源管理器默认文件夹:除了删注册表,还有这几种隐藏/恢复方法
  • 【会议征稿通知 | 中国石油大学(华东)主办 | JPCS出版 | EI 、Scopus稳定检索】第十届矿产资源、岩土与地质勘探国际学术会议 (MRGGE 2026)
  • 通达信缠论插件ChanlunX:从零到精通的完整技术分析指南
  • Excel高手进阶:用MID、FIND和LEN玩转不规则文本拆分(附模板下载)
  • 如何快速部署LAVIS:面向开发者的多模态AI完整实践指南
  • 告别libLAS!PDAL点云处理库在Windows 10 + VS2019下的保姆级配置与PCL可视化实战
  • 淘宝淘金币自动化脚本:解放双手,每天节省25分钟的终极指南
  • 2026 河南计算机类大专推荐:高考生择校全指南 - 深度智识库
  • 杭州黄金回收避坑指南|2026不被扣费的正规方法 - 润富黄金珠宝行
  • 2026 无锡黄金回收需求/克重匹配指南|黄金回收口碑排名前十名推荐 - 生活测评君
  • 宁波购宠避坑指南:5 家靠谱实体门店实测推荐 - 速递信息
  • 告别镜像拉取失败:详解在阿里云ACK中如何安全使用私有镜像仓库(Harbor/ACR)
  • 成都印刷厂厂家前几名多家资质与服务全解析 - 速递信息
  • 成都印刷厂厂家差异化定位评测:主流厂商核心优势解读 - 速递信息
  • 2026酒类全链定制哪家强?一站式解决方案与优质厂商盘点 - 深度智识库
  • 人力资源公司老板的痛点VS小猎头公司老板的焦虑——加盟南方新华,一次解决 - 榜单推荐
  • 【Claude v3.5生产环境调优白皮书】:基于17个真实客户POC数据的7层缓存+动态采样双引擎架构
  • 2026年6月四川黄金回收哪家值得选?名表名包白银奢侈品回收实力与口碑双优商家甄选 - 深度智识库
  • 2026年 角钢/槽钢/方管/方距管/无缝方管厂家推荐:冷拔异型管与镀锌钢管源头实力工厂排行 - 品牌企业推荐师(官方)
  • 信息化运维项目费用测算全指南:政策边界、三大方法与实操要点
  • 太原购宠避坑指南:5 家靠谱实体门店实测推荐 - 速递信息
  • 3大核心功能让Dism++成为Windows系统维护的必备神器
  • 医疗AI对话系统:用NLP与情感计算实现药品短缺场景的自动化共情
  • 2026年郑州全网营销推广怎么选?AI推广+短视频代运营深度横评避坑指南 - 年度推荐企业名录
  • 2026年企业级AI大模型API路由层选型:从协议兼容到财务合规抉择
  • 2026 消防验收必备:全国真实防火门窗厂家推荐榜 - 深度智识库