国产化适配迁移记录
国产化适配迁移记录
- 本项目基于RuoYi-Vue的框架进行迁移。
- 目前已完成覆盖测试暂无其他问题。
国产化环境
名称 | 版本 |
---|---|
达梦数据库 | DmJdbcDriver18 8.1.2.144 |
通用mapper – tk.mybatis | mapper-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
已知问题
- 解决 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;
- 解决数据库模式名问题
#数据库模式名配置
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
- 出现-2106: 第1 行附近出现错误:无效的表或视图名[xxxxx]
先检查是否存在该表或视图,如果存在,尝试增加模式名。使用时建议当前访问用户的用户名和数据库模式名保持一致,能减少迁移中的该问题出现频率。 - 不是 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 日,Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业,成为 Apache的顶级项目。 我听到这个消息是挺开心的,毕竟是又一款由国人主导的apche顶级项目,再次证明国内在开源界正在发挥越来越重要的作用。 …...
多数据库学习之GBase8s查询数据库表元信息常用SQL
多数据库学习之GBase8s查询数据库表元信息常用SQL简介常用SQL创建用户创建数据库及模式获取表元数据其他参考链接简介 背景介绍 GBase 8t是基于IBM informix源代码、编译和测试体系自主研发的交易型数据库产品。 南大通用安全数据库管理系统(简称 GBase 8sÿ…...
Jetpack之Lifecycle应用与源码分析
Build lifecycle-aware components that can adjust behavior based on the current lifecycle state of an activity or fragment. 上面是源于官网的定义,简单翻译就是说Lifecycle的作用就是基于当前的Activity或者Fragment的生命周期当前状态构建可感知生命周期的…...
Python序列类型之集合
💐💐💐欢迎来到小十一的博客!!! 🎯博客主页:🎯程序员小十一的博客 🚀博客专栏:🚀Python入门基础语法 🌷欢迎关注ÿ…...
java 自定义json解析注解 复杂json解析
java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...
Vue3配置路由(vue-router)
文章目录前言一、配置路由(vue-router)1、安装路由2、新建页面3、创建路由配置文件4.特殊报错!前言 紧接上篇文章,vue3的配置与vue2是有所差别的,本文就讲述了如何配置,如果本文对你有所帮助请三连支持博主…...
【代码随想录二刷】Day9-字符串-C++
代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言:C KMP 链接:https://programmercarl.com/0459.重复的子字符串.html#kmp 用处:当出现字符串不匹配时,可以利…...
google colab上如何下载bert相关模型
首先要知道模型的地址 tensorflow版本的模型: 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)
预期效果:(借助iview-ui的在线体验页面示意一下) 项目中只有一部分页面需要缓存,且存在多级路由的页面。每打开一个菜单,就会新增一个 Tab标签,只要 Tab标签不关闭,对应的页面就会被缓存&#x…...
C++STL剖析(四)—— stack和queue的概念和使用
文章目录1. stack的介绍2. stack的构造3. stack的使用🍑 push🍑 top🍑 pop🍑 empty🍑 size🍑 swap🍑 emplace4. queue的介绍5. queue的构造6. queue的使用🍑 push🍑 size…...
流浪地球 | 建筑人是如何看待小破球里的黑科技的?
大家好,这里是建模助手。 想问问大家今年贺岁档,都跟上没有,今天请允许我蹭一下热点表达一下作为一个科幻迷的爱国之情。 抛开大刘的想象力、各种硬核科技&以及大国情怀不提,破球2中的传承还是让小编很受感动,无…...
软中断在bottom-half中调用
https://www.bilibili.com/read/cv20785285/简介软中断可以在两个位置得到机会执行:硬中断返回前 irq_exit中断下半部 Bottom-half Enable后情景分析情景1spin_unlock_bh__raw_spin_unlock_bh__local_bh_enable_ip 打开Bottom-half,并让softirq有机会…...
GEE遥感云大数据在林业中的应用
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
Apollo架构篇 - 客户端架构
前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式,不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...
JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题
目录1.优秀的Java开发者1.1 什么是Java?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驱动常用函数
以下为一些常见用户态函数在内核中的替代,包括头文件和函数声明:1、动态申请内存:linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作:linux/string.hvoid * memset(void *,int,__ker…...
Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask
文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图,并配置数据对象(不需要选择任意节点) 2. 编码与测试 /*** 部署流程*/ Test…...
C语言实现五子棋(n子棋)
五子棋的历史背景: 五子棋起源于中国,是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。五子棋容易上手,…...
OpenStack云平台搭建(2) | 安装Keystone
目录 1、登录数据库配置 2、数据库导入Keystone表 3、配置http服务 4、创建域、用户 5、创建脚本 Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。下面我们进行Keystone的安装部署 1…...
基于javaFX的固定资产管理系统
1. 总体设计 本系统分为登录模块、资产管理模块、资产登记模块和信息展示模块共四个模块。 登录模块的主要功能是:管理员通过登录模块登录本系统; 资产管理模块的主要功能有:修改、删除系统中的固定资产; 在资产登记模块中&#…...
板子登录和挂载问题记录
ubuntu登录板子问题 ssh登录ssh 10.1.3.15,显示No route to host 则尝试在板子上ping 本机ip 试一下 挂载 本地机器vim /etc/export编辑此内容并保存 /exports_0209/tda4_build *(rw,no_root_squash,nohide,insecure,no_subtree_check,async)1.挂载nfs方法 mou…...
二、Linux文件 - Open函数讲解实战
目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 2.3.1O_RDWR和O_CREAT 2.3.2O_APPEND的用法 1.Open函数讲解 高频使用的Linux系统调用:open write read close Linux自带的工具…...
源码分析Spring解决循环依赖的过程
循环依赖是之前很爱问的一个面试题,最近不咋问了,但是梳理Spring解决循环依赖的源码,会让我们对Spring创建bean的流程有一个清晰的认识,有必要搞一搞。开始搞之前,先参考了这个老哥写的文章,对Spring处理循…...
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集已使用.NETFramework 2.0,3.0或3.5创建了.NET程序集,但是当尝试在构造函数节点中加载这些程序集时,却收到LabVIEW消息显示: 所选文件不是.NET程序集,所属类型库或自动化可执行文件。所以想确认是否可以在…...
Fluent Python 笔记 第 2 章 序列构成的数组
2.1 内置类型序列概览 容器序列(能存放不同类型的数据):(作者分的类) list、tuple 和 collections.deque扁平序列(只能容纳一种类型): str、byes、bytearray、memoryview 和 array.array可变:…...
句子扩充法
人,物,时,地,事 什么人和什么物在什么时间什么地点发生了什么事。 思维导图:以人为中心,人具有客观能动性。 例如:秋燕南飞。 扩展为: 盘旋在洞庭湖上方的大雁渐渐消失了。“它们都…...
Java并发编程概述
在学习并发编程之前,我们需要稍微回顾以下线程相关知识:线程基本概念程序:静态的代码,存储在硬盘中进程:运行中的程序,被加载在内存中,是操作系统分配内存的基本单位线程:是cpu执行的…...
Java常见数据结构的排序与遍历(包括数组,List,Map)
数组遍历与排序 数组定义 //定义 int a[] new int[5]int[] a new int[5];//带初始值定义 int b[] {1,2,3,4,5};赋值 //定义时赋值 int b[] {1,2,3,4,5};//引用赋值 a[6] 1 a[9] 9 //未赋值为空取值 //通过下表取值,从0开始 b[1] 1 b[2] 2遍历 Test p…...
数据结构|绪论
🔥Go for it!🔥 📝个人主页:按键难防 📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 📖系列专栏:数据结构与算法 ὒ…...
wap网站建设/微信营销推广公司
给定 n 个不同的正整数,整数 k(k < n)以及一个目标数字 target。 在这 n 个数里面找出 k 个数,使得这 k 个数的和等于目标数字,求问有多少种方案?在线评测地址:LintCode 领扣样例1输入: Lis…...
黄页模式/凯里seo排名优化
需求:使用spark统计词频,并求出现次数最多的10个词以及出现次数问题:用Spark算子top(),求top N的时候结果不准确我们用一首被初中生唱收费的《That girl》来做测试:步骤一:使用算子map() 、reduceByKey()、…...
高端网站制作费用/企业员工培训内容及计划
出现这个问题是由于我本地Podfile文件上第三方版本太低。 解决方案就是,更新一下本地Podfile文件上的第三方版本,也就是pod update --verbose一下。 注意一下,这个命令需要很长时间。转载于:https://www.cnblogs.com/Rinpe/p/5377747.html...
vps建站教程/搜索量查询百度指数
题意是说第一行字符串能否由第二行字符串经过“替代”和“位置转换”后得到。 做题时,实际上只统计两个字符串的各字符出现的“次数”是否相同即可(不必计较这相同次数是否字符也相同)。 算法思想如下: 1)读入两行字符…...
订做网站策划/论坛外链代发
CRM的出现,改变了以往客户资料分散、客户管理复杂繁琐的状况,还让企业对客户数据、产品信息、员工数据实现了统一。自20世纪90年代以来,CRM的经营理念和运作体系迅速被企业界所接受并在大企业得到广泛应用。但是,占企业总数90%以上…...
建国际网站需要多少钱/安徽网站seo公司
如何利用fg迅速回到vim中?当用vim修改某文件中的一个参数时,由于参数很长记不住。往往出现当我们刚刚用vim刚打开这个文件后,就忘记了刚刚的参数。这时我们需要暂时退出这个文件去一个目录中找参数。或者有多次打开关闭同一个文件的操作时。那…...