Day111 达梦数据库-若依-MP适配
1.达梦数据库
达梦数据库管理系统:达梦官方提供的数据库可视化工具
1.1 官网下载安装包
官网下载windows安装包:https://www.dameng.com/list_103.html

1.2 安装
1.打开刚才下载的压缩包(不必解压,直接点击iso文件),再点击exe文件,点击确定
2.一直傻瓜式下一步,并选择安装路径,点击安装

1.3 初始化数据库
1.点击初始化按钮,进行初始化

2.点击开始按钮,开始创建数据库实例

3.创建数据库完成

1.4 打开可视化工具、连接数据库
1.按键盘windows键,点击DM管理工具
注意:安装完毕之后在开始菜单中,会有达梦自带的各种工具
DM服务查看器:类似windows自带的服务,其中只负责管理DM相关服务
DM管理工具:达梦自带的数据库工具,类似Navicat
DM控制台工具:用于管理数据库及数据库实例的各种参数,数据库实例备份和还原
DM审计分析工具:对数据库的操作做统计分析,可以自定义规则
DM数据库配置助手:对数据库实例做增删改查
DM数据迁移工具:从各种数据库、文件迁移到达梦
DM性能监视工具:监视使用情况、会话、事务

2.打开DM管理工具后,点击这个按钮,可进行数据库连接


3.出现这个窗口,填写数据库连接信息,点击测试按钮提示成功

4.出现这个窗口,表示数据库连接成功

2.若依集成mybatis-plus
2.1 步骤
1.打卡ruoyi-admin项目下的pom文件,加入以下依赖
<!--lombook-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.打开ruoyi-common项目下的pom文件,加入以下依赖
<!-- 集成mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
3.打开ruoyi-quartz项目下的pom文件,加入以下依赖
<!-- 集成mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
4.打开ruoyi-system项目下的pom文件,加入以下依赖
<!-- 集成mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
5.打开根项目下的pom文件(就是最外边的那个pom文件)
<!-- 集成mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.5.1</version>
</dependency>
6.双击两下shift键,搜索MyBatisConfig类,注销这个类,添加下面的MybatisPlusConfig类
package com.ruoyi.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@MapperScan(basePackages = {"com.ruoyi.**.mapper"})
@Configuration
@EnableAspectJAutoProxy(exposeProxy = true)
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
// 防止全表更新与删除插件
interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
return interceptor;
}
/**
* 分页插件,自动识别数据库类型
*/
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 设置数据库类型为mysql
paginationInnerInterceptor.setDbType(DbType.MYSQL);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInnerInterceptor.setMaxLimit(-1L);
return paginationInnerInterceptor;
}
/**
* 乐观锁插件
*/
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
return new OptimisticLockerInnerInterceptor();
}
/**
* 如果是对全表的删除或更新操作,就会终止该操作
*/
public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
return new BlockAttackInnerInterceptor();
}
}
2.2 使用QueryWrapper
2.2.1 service层:
集成前:public interface xxxRecordService
集成后:public interface xxxService extends IService
在service名称后面加上以下代码
extends IService<实体类名称>
2.2.2 impl 实现接口类层
集成前:
public class xxxRecordServiceImpl implements xxxRecordService集成后:
public class xxxRecordServiceImpl extends ServiceImpl<xxxMapper, xxx> implements xxxService
在实现类名称后面,implements前面去加上以下代码
xxxMapper:mapper层名称
xxx:实体类名称
extends ServiceImpl<xxxMapper xxx>
2.2.3 Mapper层
集成前:
public interface xxxMapper集成后:
public interface xxxMapper extends BaseMapper
在mapper名称后面加上以下代码
extends BaseMapper<实体类名称>
3.达梦数据库-若依-国产化适配指南
适用范围:本指南适用于SpringBoot+Vue等前后端分离项目
3.1 数据库迁移
MySQL数据库迁移到DM数据库
3.1.1 创建用户
打开DM数据迁移工具,在用户 > 管理用户 > 右键新建用户


创建完用户之后,模式中就会出现一个和当前创建的用户名一样的模式出来

至此,一个新的数据库(Mysql中的数据库,DM里的模式)已经创建完毕
但此时这个用户还不具备对表增删改查的权利, 右键用户修改为它新增两项角色

3.1.2 从Mysql迁移到达梦
打开DM数据迁移工具,在空白处右键新建

新建工程取名+描述 => 进入工程 右键新建迁移


创建好了之后点击下一步


点击下一步之后填写用户名和密码,如果是高版本的Mysql,需要自行下载驱动

之后填写目标数据库(也就是达梦)的连接信息

看情况选择是否保持对象名大小写,如果不选则默认会是大写

选择目标模式,可以手填,后面勾选创建模式,如果不存在则会创建(选择若依的数据库)

点击选择,就会全选

点击下一步之后勾选以表格的方式现实执行任务

至此已迁移完毕
3.2 后端更换达梦数据源
将MySQL数据源更换为DM数据源
3.2.1 DM安装驱动
从官网中下载 达梦JDBC 驱动包

JDK 1.8对应的 JDBC 驱动包为:DmJdbcDriver18.jar

需要将 DmJdbcDriver18.jar 添加到本地的 maven 仓库中,从本地引用 DmJdbcDriver18.jar 的依赖,在 maven 打包的时候,可以正常被打入到整体包中
将 DmJdbcDriver18.jar copy 到一个指定的目录(如:D:\dm\)

将驱动包安装包本地 maven 仓库,执行如下命令:cmd
mvn install:install-file -DgroupId=dm.jdbc -DartifactId=DmJdbcDriver18 -Dversion=1.0 -Dpackaging=jar -Dfile=D:\dm\DmJdbcDriver18.jar
命令执行效果如下:

3.2.2 修改配置
JDBC依赖
修改项目中ruoyi-admin模块下的pom.xml文件
<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>
数据库连接池配置
修改项目中ruoyi-admin模块下的application-druid.yml文件;
# 数据源配置
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
3.2.3 适配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} ||',')
3.在system模块的xml的mapper文件夹内找到SysMenuMapper.xml,这个文件中的query加了``,在mysql中是关键字,我们要将这个引号去掉就好了

4.在system模块的xml的mapper文件夹内找到SysNoticeMapper.xml,其中的sql标签内有一个cast函数,它的作用是将结果转为对应类型,在达梦里需要给一个长度,填写稍大一点即可。

至此数据就迁移完成,启动项目,运行成功!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)