一、 数据库国产化浪潮下的“隐痛”
在当前信创产业的大背景下,MySQL 迁移到达梦(Dameng) 已成为很多开发者的必修课。虽然市面上有很多商用迁移工具,但开发者在实际业务代码迁移中,依然面临两大难题:
- 动态 SQL 难以处理: 存量代码里的复杂查询、特定函数,工具转不动,只能人工改。
- 黑盒工具扩展难: 遇到工具不支持的语法(如一些使用频率很低的函数),除了等官方更新,开发者毫无办法。
为了彻底解决这个问题,我开发了 Field-Encryptor 的子模块:一个基于 AST(抽象语法树)的异构数据库转换框架。
二、 了解一下【Field-Encryptor】
Field-Encryptor 是一款专为 Java 开发者打造的透明数据中间层框架。基于Mybatis拦截器。
它的核心原则只有一条:让业务代码完全感知不到它的存在
它的 transformation 功能,能够实现0感知的异构数据库切换,目前本身仅提供了mysql到达梦的实现,想实现其它异构数据库的切换,有扩展口可以自行扩展
-
引入pom (这里暂时使用3.6.0-alpha版本,最新版本3.6.1-alpha提测阶段,尚未发布)
<dependency> <groupId>io.gitee.tired-of-the-water</groupId> <artifactId>encryptor-core</artifactId> <version>3.6.0-alpha</version> </dependency> -
增加配置
#配置@TableName标注的实体类路径,如果没有实体类的话,仅仅使用异构数据库转换功能的话,这个配置可以随便写,但是必须有这个配置!!! (后续优化版本考虑异构数据库迁移可不配置此项,当前版本必须有) field.scanEntityPackage[0]=com.sangsang.*.entity #指定转换模式为mysql转换达梦 field.transformation.patternType=mysql2dm -
更换项目驱动和数据库地址信息后就可以验证了
mysql的常见语法转换到达梦数据库此时就已经做完了,可以验证了。
目前只兼容了常见函数,语法的转换,如果遇到了项目未转换的,可以自行扩展,详情进gitee了解
三、为什么 MySQL -> 达梦 只是它的“基本功”?
这个框架最核心的价值在于:高度的可扩展性。
1.自定义框架未覆盖的语法
通过sql语法解析,将sql解析为各种语法节点,为每一个节点提供策略钩子
可以自己在自己项目中实现这些钩子,扩展框架中遗漏的语法
2.轻松扩展其它异构数据库
今天是从 MySQL 转达梦,明天想转 OpenGauss 或 Oracle?但是框架目前本身只实现了mysql转达梦,怎么搞?
框架提供了扩展口,可以自行扩展,详情进gitee了解
四、 技术核心:不仅是转换,更是掌控
这个工具基于高性能的 SQL 解析器,通过对 AST 的深度遍历实现转换。
- 精准: 基于语法树而非正则替换,避免了误伤字符串内容。
- 解耦: 转换逻辑与业务逻辑完全分离,对代码无侵入。
- 强大: 即使是
Field-Encryptor主打的字段加解密功能,也是建立在这套强大的 SQL 改写机制之上的。
五、 写在最后
希望大家不再为数据库迁移的琐碎语法折腾。
如果你:
- 正在做 MySQL 到达梦的迁移,想找个趁手的工具。
- 对 SQL 解析、AST 改写感兴趣。
- 想要针对特定数据库实现一套自己的转换逻辑。
MySQL 转达梦只是起点,我们的目标是:让 SQL 在异构数据库之间不再有隔阂。
- 🔥 Gitee 传送门:点击进入项目主页
- 💬 技术交流QQ群:1072901252
- 📧 开发者邮箱:990319383@qq.com