吉林省建设厅网站,工程建设合同范本,wordpress 推送插件,泰安考试信息网官网国产化适配迁移记录
本项目基于RuoYi-Vue的框架进行迁移。目前已完成覆盖测试暂无其他问题。
国产化环境
名称版本达梦数据库DmJdbcDriver18 8.1.2.144通用mapper – tk.mybatismapper-spring-boot-starter 4.2.5!-- 达梦数据库--dependencygroupId…国产化适配迁移记录
本项目基于RuoYi-Vue的框架进行迁移。目前已完成覆盖测试暂无其他问题。
国产化环境
名称版本达梦数据库DmJdbcDriver18 8.1.2.144通用mapper – tk.mybatismapper-spring-boot-starter 4.2.5!-- 达梦数据库--dependencygroupIdcom.dameng/groupIdartifactIdDmJdbcDriver18/artifactIdversion8.1.2.141/version/dependencydependencygroupIdtk.mybatis/groupIdartifactIdmapper-spring-boot-starter/artifactIdversion4.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是否相等相等 res1IF 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:loopIndex1;-- 当piv_str中还有分隔符时IF l_idx 0 THEN-- 截取第一个分隔符前的字段strstr: SUBSTR(piv_str, 1, l_idx-1);-- 判断 str 和piv_str1 是否相等相等 res1 并结束循环判断IF str piv_str1 THENres: loopIndex;EXIT;END IF;piv_str : SUBSTR(piv_str, l_idxLENGTH(p_sep));ELSE-- 当截取后的piv_str 中不存在分割符时判断piv_str和piv_str1是否相等相等 res1IF 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_idop.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类型数据可能会引起异常