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

国产化适配迁移记录

国产化适配迁移记录

  • 本项目基于RuoYi-Vue的框架进行迁移。
  • 目前已完成覆盖测试暂无其他问题。

国产化环境

名称版本
达梦数据库DmJdbcDriver18 8.1.2.144
通用mapper – tk.mybatismapper-spring-boot-starter 4.2.5
			<!-- 达梦数据库--><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.2.141</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>4.2.2</version></dependency>

技术文档支持

达梦官网
达梦产品下载
达梦官方技术社区
达梦技术指南
Linux 安装
Windows 安装

Mysql数据迁移

已进行测试数据:基础平台开发库基础表数据和结构部分无损迁移
使用DM数据迁移工具 --> 新建工程 --> 右键迁移目录节点 --> 新建迁移
涉及截图较多,随后再添加吧,挺简单的,遇到的问题都在下面写着呢

项目配置更改

数据源配置

#yml切换配置  
#mysql  
driverClassName: com.mysql.cj.jdbc.Driver  
#达梦  
driverClassName: dm.jdbc.driver.DmDriver  

已知问题

  1. 解决 FIND_IN_SET函数问题
CREATE OR REPLACE 
FUNCTION 模式名.FIND_IN_SET ( piv_str1 VARCHAR2,piv_str2 VARCHAR2,p_sep    VARCHAR2 := ',')RETURN NUMBER
ISl_idx     NUMBER:=0;                 -- 用于计算piv_str2中分隔符的位置str       VARCHAR2(500);             -- 根据分隔符截取的子字符串piv_str   VARCHAR2(500) := piv_str2; -- 将piv_str2赋值给piv_strres       NUMBER        :=0;         -- 返回结果loopIndex NUMBER        :=0;
BEGIN-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1IF instr(piv_str, p_sep, 1) = 0 THENIF piv_str              = piv_str1 THENres := 1;END IF;ELSE-- 循环按分隔符截取piv_strLOOPl_idx    := instr(piv_str, p_sep);loopIndex:=loopIndex+1;-- 当piv_str中还有分隔符时IF l_idx > 0 THEN-- 截取第一个分隔符前的字段strstr:= SUBSTR(piv_str, 1, l_idx-1);-- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断IF str = piv_str1 THENres:= loopIndex;EXIT;END IF;piv_str := SUBSTR(piv_str, l_idx+LENGTH(p_sep));ELSE-- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1IF piv_str = piv_str1 THENres:= loopIndex;END IF;-- 无论最后是否相等,都跳出循环EXIT;END IF;END LOOP;-- 结束循环END IF;-- 返回resRETURN res;
END FIND_IN_SET;
  1. 解决数据库模式名问题
#数据库模式名配置
mydb:myDatabaseSchemaName: scctest.
@Configuration
public class MyBatisConfig {/*** 数据库模式名*/@Value("${mydb.myDatabaseSchemaName}")private String myDatabaseSchemaName;/*** 数据库模式名key*/private final static String DATABASE_SCHEMA_NAME = "myDatabaseSchemaName";@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();Properties pro = new Properties();pro.setProperty(DATABASE_SCHEMA_NAME, this.myDatabaseSchemaName);sessionFactory.setConfigurationProperties(pro);}
#sql写法
select * from ${myDatabaseSchemaName}sys_user 
#实际效果
select * from scctest.sys_user 
  1. 出现-2106: 第1 行附近出现错误:无效的表或视图名[xxxxx]
    先检查是否存在该表或视图,如果存在,尝试增加模式名。使用时建议当前访问用户的用户名和数据库模式名保持一致,能减少迁移中的该问题出现频率。
  2. 不是 GROUP BY 表达式
    所有通用关系型数据库标准语法都是这样的,SELECT子句中的列名必须为分组列或列函数,列函数对于GROUP BY子句定义的每个组各返回一个结果。对该语句oup.project_id,op.project_name字段均为分组列必须包含在GROUP BY中,如果不需要对project_name字段进行分组,那么需要在select中去掉该字段,如果又需要查询出project_name字段的值,可以考虑使用子查询的方式。

其他常见问题预检查

  • 字符串转换异常 建议检查错误:- 传入数字类型,数据库为字符串 在系统运行时会出现该错误,在达梦控制台执行sql无异常;
  • GROUP_CONCAT 替换函数 WM_CONCAT
  • 禁止使用Mysql的 ` 分隔符来标记特殊字段
  • 主键字段建议如下标记:
    • @Id 标记id字段
    • @KeySql(useGeneratedKeys = true) 标记插入时返回自增主键ID ,封包通用mapper时使用
    • @Column(insertable = false) 插入时不传入主键(通用mapperch插入时默认是id =null,达梦数据库不支持),非自增可不添加该注解
  • 数据库迁移时请优先在mysql数据库将datetime类型字段修改为timestamp,减少迁移过程中时间问题引发的异常错误
  • 低版本tk.mybatis和dm驱动包可能引起更新时封包数据异常(表现为主键Id数值异常)达梦官网我提出的相关问题描述 建议使用文章开头列举的版本可以解决该问题
  • SET IDENTITY_INSERT 表名 ON; 用这个sql来解决主键不允许修改,或者不允许指定主键值的问题。官方列举说可能是针对此次链接有效。目前个人测试是一直有效。暂时无法验证准确性
  • sp_set_para_value(1,‘ENABLE_BLOB_CMP_FLAG’,1); 此sql来解决大字段排序问题。
  • 查询时如果 字符串类型传入 int类型数据可能会引起异常

相关文章:

国产化适配迁移记录

国产化适配迁移记录 本项目基于RuoYi-Vue的框架进行迁移。目前已完成覆盖测试暂无其他问题。 国产化环境 名称版本达梦数据库DmJdbcDriver18 8.1.2.144通用mapper – tk.mybatismapper-spring-boot-starter 4.2.5<!-- 达梦数据库--><dependency><groupId>…...

又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目

2023 年 1 月 26 日&#xff0c;Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业&#xff0c;成为 Apache的顶级项目。 我听到这个消息是挺开心的&#xff0c;毕竟是又一款由国人主导的apche顶级项目&#xff0c;再次证明国内在开源界正在发挥越来越重要的作用。 …...

多数据库学习之GBase8s查询数据库表元信息常用SQL

多数据库学习之GBase8s查询数据库表元信息常用SQL简介常用SQL创建用户创建数据库及模式获取表元数据其他参考链接简介 背景介绍 GBase 8t是基于IBM informix源代码、编译和测试体系自主研发的交易型数据库产品。 南大通用安全数据库管理系统&#xff08;简称 GBase 8s&#xff…...

Jetpack之Lifecycle应用与源码分析

Build lifecycle-aware components that can adjust behavior based on the current lifecycle state of an activity or fragment. 上面是源于官网的定义&#xff0c;简单翻译就是说Lifecycle的作用就是基于当前的Activity或者Fragment的生命周期当前状态构建可感知生命周期的…...

Python序列类型之集合

&#x1f490;&#x1f490;&#x1f490;欢迎来到小十一的博客&#xff01;&#xff01;&#xff01; &#x1f3af;博客主页&#xff1a;&#x1f3af;程序员小十一的博客 &#x1f680;博客专栏&#xff1a;&#x1f680;Python入门基础语法 &#x1f337;欢迎关注&#xff…...

java 自定义json解析注解 复杂json解析

java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...

Vue3配置路由(vue-router)

文章目录前言一、配置路由&#xff08;vue-router&#xff09;1、安装路由2、新建页面3、创建路由配置文件4.特殊报错&#xff01;前言 紧接上篇文章&#xff0c;vue3的配置与vue2是有所差别的&#xff0c;本文就讲述了如何配置&#xff0c;如果本文对你有所帮助请三连支持博主…...

【代码随想录二刷】Day9-字符串-C++

代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言&#xff1a;C KMP 链接&#xff1a;https://programmercarl.com/0459.重复的子字符串.html#kmp 用处&#xff1a;当出现字符串不匹配时&#xff0c;可以利…...

google colab上如何下载bert相关模型

首先要知道模型的地址 tensorflow版本的模型&#xff1a; https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip pytorch版本的模型 ‘bert-base-cased’: …...

Vue2.0页面缓存机制联合页面标签的交互(keep-alive + router)

预期效果&#xff1a;&#xff08;借助iview-ui的在线体验页面示意一下&#xff09; 项目中只有一部分页面需要缓存&#xff0c;且存在多级路由的页面。每打开一个菜单&#xff0c;就会新增一个 Tab标签&#xff0c;只要 Tab标签不关闭&#xff0c;对应的页面就会被缓存&#x…...

C++STL剖析(四)—— stack和queue的概念和使用

文章目录1. stack的介绍2. stack的构造3. stack的使用&#x1f351; push&#x1f351; top&#x1f351; pop&#x1f351; empty&#x1f351; size&#x1f351; swap&#x1f351; emplace4. queue的介绍5. queue的构造6. queue的使用&#x1f351; push&#x1f351; size…...

流浪地球 | 建筑人是如何看待小破球里的黑科技的?

大家好&#xff0c;这里是建模助手。 想问问大家今年贺岁档&#xff0c;都跟上没有&#xff0c;今天请允许我蹭一下热点表达一下作为一个科幻迷的爱国之情。 抛开大刘的想象力、各种硬核科技&以及大国情怀不提&#xff0c;破球2中的传承还是让小编很受感动&#xff0c;无…...

软中断在bottom-half中调用

https://www.bilibili.com/read/cv20785285/简介软中断可以在两个位置得到机会执行&#xff1a;硬中断返回前 irq_exit中断下半部 Bottom-half Enable后情景分析情景1spin_unlock_bh__raw_spin_unlock_bh__local_bh_enable_ip 打开Bottom-half&#xff0c;并让softirq有机会…...

GEE遥感云大数据在林业中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…...

Apollo架构篇 - 客户端架构

前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式&#xff0c;不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...

JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题

目录1.优秀的Java开发者1.1 什么是Java&#xff1f;1.2 编程语言1.3 计算机[硬件]能够懂的语言1.3.1 计算机发展史1.3.2 计算机体系结构1.3.3 计算机处理数据过程1.3.4 机器语言1.3.5 不同厂商的CPU1.3.6 操作系统1.3.7 汇编语言1.3.8 高级语言1.3.9 编译型和解释型1.3.9.1 编译…...

linux驱动常用函数

以下为一些常见用户态函数在内核中的替代&#xff0c;包括头文件和函数声明&#xff1a;1、动态申请内存&#xff1a;linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作&#xff1a;linux/string.hvoid * memset(void *,int,__ker…...

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图&#xff0c;并配置数据对象&#xff08;不需要选择任意节点&#xff09; 2. 编码与测试 /*** 部署流程*/ Test…...

C语言实现五子棋(n子棋)

五子棋的历史背景&#xff1a; 五子棋起源于中国&#xff0c;是全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连珠者获胜。五子棋容易上手&#xff0c…...

OpenStack云平台搭建(2) | 安装Keystone

目录 1、登录数据库配置 2、数据库导入Keystone表 3、配置http服务 4、创建域、用户 5、创建脚本 Keystone&#xff08;OpenStack Identity Service&#xff09;是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。下面我们进行Keystone的安装部署 1…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...