日期 版本 作者 说明
2023-4-26 V-1.0 孔留锋 文档创建。

概要

简介

​ 项目基于RuoYi前后端分离版本3.8.1。现数据需从Mysql迁移到达梦数据库。

连接

1.引入驱动

(1)common 模块 新建 lib 包,上传 DmJdbcDriver18.jar (该文件安装DM数据库过程中根目录下存在)驱动到文件中

image-20230505180532359

(2)修改common模块对应的pom文件,添加如下

1
2
3
4
5
6
7
8
9
10
11
12
<!--
common 包下 新建 lib 包,上传 DmJdbcDriver18.jar 驱动到文件中
-->
<dependencies>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}\lib\DmJdbcDriver18.jar</systemPath>
</dependency>
</dependencies>

2.修改MySQL 连接

修改application-druid.yml如下

1
2
3
4
5
6
7
8
9
10
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: dm.jdbc.driver.DmDriver
druid:
# 主库数据源
master:
url: jdbc:dm://192.168.1.60:5236
username: SJCS
password: '@zzsn9988'

SQL语法差异总结

1.INNER JOIN 多表问题

​ 达梦数据库不支持3张表以上连接,最后在on 里面同一指定关联关系。

1
2
3
4
5
-- 不支持 
select * from a INNER JOIN b INNER JOIN c ON a.a_id = b.a_id and b.id = c.b_id

--修改如下
select * from a INNER JOIN b ON a.a_id = b.a_id INNER JOIN c ON b.id = c.b_id

2.GROUP BY 和 ORDER BY 同时使用问题

​ 达梦数据库不支持同时使用 GROUP BY 和 ORDER BY。

1
2
3
4
5
6
7
-- 不支持
select r_id from a group by a.r_id order by c.create_time desc

-- 修改如下
select b.r_id from (
select r_id from a order by c.create_time desc
) b group by b.r_id

SQL适配

适配一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!-- 原始SQL -->
SELECT
t.id
FROM
(
SELECT
c.id
FROM
sys_audititem a
INNER JOIN sys_audititem_audititem_meta b
INNER JOIN sys_audititem_meta c ON a.id = b.audititem_id
AND b.audititem_meta_id = c.id
WHERE
a.type = 0
AND a.path_ids LIKE '%1542426374668255233%'
AND c. STATUS = 1
GROUP BY
c.id
ORDER BY
c.update_date DESC
LIMIT 1,20
) AS t
<!-- 修改后的sql-->
SELECT
t.id
FROM
(
SELECT
c.id
FROM
sys_audititem a
INNER JOIN sys_audititem_audititem_meta b ON a.id = b.audititem_id
INNER JOIN sys_audititem_meta c ON b.audititem_meta_id = c.id
WHERE
a.type = 0
AND a.path_ids LIKE '%1542426374668255233%'
AND c. STATUS = 1
ORDER BY
c.update_date DESC
) AS t
GROUP BY
t.id
LIMIT 1,20
<!--
原因:1. GROUP BY c.id ORDER BY c.update_date DESC ,同时应用不支持
2. INNER JOIN 每俩个表 后面都要跟 on , (三张表 INNER JOIN 完毕后,on and ,不支持)
-->