当前位置: 首页 > 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.jsqmd.com/news/904614/

相关文章:

  • 广州小红书代运营公司排名及联系方式——广州市壹起航科技有限公司:17年全网营销积淀,打造小红书实效代运营行业标杆(更新时间:2026-05-27 23:16:59) - 趣谈科技事物
  • 生产者消费者模式:使用Queue标准库构建生产者消费者爬虫模型。深度实战:基于Queue标准库的生产者消费者爬虫模型,打造高并发分布式采集系统
  • 超越基础:为你的Unity小地图加入高级功能(雷达扫描、迷雾探索、多目标标记)
  • Akagi麻将AI助手:你的实时私人教练,让每局麻将都成为学习机会
  • Windows Cleaner:3步彻底告别C盘爆红,让你的电脑飞起来!
  • 系统性能调优实战:JVM与应用优化
  • 激光雕刻控制软件LaserGRBL:从入门到精通的5个关键问题解答
  • Linux内核开发者视角:深入PCIe AER驱动与Firmware First模型的交互与优化
  • 基于Arduino与蓝牙模块的智能小车制作:从硬件组装到代码调试全流程
  • 3分钟快速激活Beyond Compare:终极免费密钥生成方案
  • 如何轻松获取网页媒体:猫抓扩展的实用技巧指南
  • 猫抓:网页视频下载的终极解决方案,轻松捕获所有流媒体资源
  • 告别Win10资源管理器默认文件夹:除了删注册表,还有这几种隐藏/恢复方法
  • 【会议征稿通知 | 中国石油大学(华东)主办 | JPCS出版 | EI 、Scopus稳定检索】第十届矿产资源、岩土与地质勘探国际学术会议 (MRGGE 2026)
  • 布隆过滤器去重:在分布式环境下使用布隆过滤器去重URL。布隆过滤器去重实战:每天处理千万级URL的Python爬虫这样写
  • 通达信缠论插件ChanlunX:从零到精通的完整技术分析指南
  • 从零开始点亮LED:电子入门基础与Tinkercad仿真实践
  • 无细胞蛋白表达应用案例:eProtein Discovery实现BTK抑制剂5天筛选与功能表征
  • 5步构建炉石传说AI机器人:Hearthrock引擎实战指南
  • Scrapy + Redis:使用Scrapy-Redis实现分布式抓取。Scrapy + Redis:从零构建企业级分布式爬虫系统
  • 如何快速部署LAVIS:面向开发者的多模态AI完整实践指南
  • 从医疗诊断到垃圾邮件过滤:混淆矩阵与F1 Score在实际业务场景中的选择指南
  • Excel高手进阶:用MID、FIND和LEN玩转不规则文本拆分(附模板下载)
  • 随州黄金回收2026报价|正规渠道与避坑指南 - 润富黄金珠宝行
  • 在Taotoken模型广场根据任务需求与预算快速筛选合适模型
  • 淘宝淘金币自动化脚本:解放双手,每天节省25分钟的终极指南
  • 告别libLAS!PDAL点云处理库在Windows 10 + VS2019下的保姆级配置与PCL可视化实战
  • Fast-GitHub:国内开发者必备的GitHub加速神器,下载速度提升50倍!
  • 2026年嘉兴不锈钢水箱厂家嘉兴晶览从水泵配套幕后走向直客服务前台 - 资讯焦点
  • 2026 河南计算机类大专推荐:高考生择校全指南 - 深度智识库