大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说达梦数据库迁移(三)[通俗易懂],希望您对编程的造诣更进一步.
前言
前面两篇文章,介绍了一些迁移前的准备工作,实现了数据的导入,但是当我将数据导入到DM后,启动了自己的项目,接下来一堆报错接踵而至,总结了一些常见的报错,在这里做个记录。
报错记录
关键字
达梦数据库的关键字是双引号(“”),而mysql的关键字是反引号(“),所以一些sql的字段加了关键字的,只能做下替换。
这次替换其实后来发现替换的地方还挺多的,究其原因,还是在设计MYSQL表字段的时候,起名字不规范引起的,用了一些关键字做了字段名,如key、code等字段名。
真是偷懒一时爽,改起来火葬场
mybatis大小写转换
mybatis在我们开启了如下配置
mapUnderscoreToCamelCase:true
后,在mabatis的mapper文件写了如下sql后:
<select id="queryDeviceByPage" resultType="map" parameterType="map">
select
t1.id as id,
t1.work_id as workId,
t1.work_ip as workIp,
t1.work_moudle workMoudle
from
xxx t1
</select>
发现并没有在前端转成驼峰命名,而是变成了一堆小写,究其原因,还是达梦数据库的Driver和mysql的Driver实现有点差别,感兴趣可以去研究源码,将sql改为如下内容即可:
select
t1.id as id,
t1.work_id as work_id,
t1.work_ip as work_ip,
t1.work_moudle work_moudle
from
xxx t1
建议mapper文件使用resultMap实体映射
函数替换
mysql当中有些函数达梦是不适用的,需要做些适配
- group_concat() 替换成 wm_concat()
- 去除STR_TO_DATE()
- 不支持 from_unixtime 函数,使用 round 代替
个人觉得,数据库是提供了一些比较方便的函数,但是如果项目为了兼容性更强,或者强依赖索引,还是在业务层处理比较好。
mybatisplus查询有达梦的关键字
实体类添加如下:
@TableField(""logic"")
private String logic;
varchar和text
text字段无法distinct,group by,order by,建议改为varchar
结语
将上面的问题修改完成后,系统确实可以运行了起来,接下来要思考的就是,如何可以一套代码兼容两个数据库。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5951.html