❝预祝朋友们新年快乐,身体健康,永无BUG
❞
❝今年是很特殊的一年,也是比较忙碌的一年,在年初有幸与腾讯同学一起开发过健康码项目,也算是贡献了自己的一份力。后来公司组建新的项目团队,我又马上参与到新项目的方案讨论与开发,直到年尾,也没轻松过。
❞
❝公众号更文就少了,很对不住关注我的朋友们哈。
❞
❝后台有粉丝留言,希望能学习sql-translator的代码,我这里也正式的简单介绍一下本项目吧。毕竟是我创建了github,真正的代码还没提交,就有朋友在关注这个项目了。不能辜负你们呢。
❞
❝有任何技术问题,都可以后台留言哈。我看到了也会第一时间回复你们。
❞
一、概述
前期项目基本是一套后端代码
对应一套数据库环境
,并没有考虑到跨数据库环境下的支持。后来随着项目不断维护, 需要切换到不同的数据库,那如何快速地改造项目去支持跨数据库呢?
对于我们的项目来说,目前是基于Mybatis去做持久层框架开发,并不像JPA对于跨数据库的兼容性高。
虽说Mybatis
在xml
中编写SQL
的时候,提供了参数databaseId
来指定该条SQL是Oracle
还是MySQL
。如果项目里涉及到大量的SQL
要去排查与改造,以及部分SQL
还是通过代码去写的,改造起来的难度极大。
基于Mybatis
要做跨数据库的难点总结如下:
❝❞
原有
Mybatis
如果要配置跨库,SQL
需要配置多套,后期SQL
难以维护;如果
SQL
是写在代码里面的,意味着代码要写多套,后期代码也是难以维护;
经过一段时间调研,发现目前还没有一款优秀的开源SQL转换工具。
经过一段时间整合使用后,对于转换数据库来说已经可以支持百分之七八十的语法转换。但是目前就仅支持Oracle转MySQL
,在其完善度上还有很大提升空间,便基于这种方案思路,进行重构开源,希望借助开源的力量,和志同道合的朋友们来一起完善它。
接下来开始阐述一下:sql-translator
是什么?能做什么事?大概实现原理是什么?