之前一直使用Mybatis log插件自从这个插件收费之后我就再也没有使用过,最近利用业余时间自己开发了一个类似的插件取名叫SQL Dump并已经在Github开源。
开源地址:https://github.com/xuchengen/leo
IDEA插件开发文档:https://plugins.jetbrains.com/docs/intellij/plugin-structure.html
参考插件:https://github.com/huzunrong/mysql-explain
首先分析一下Mybatis Log插件,这款插件自收费之后就没有开源且老的开源仓库删掉了核心代码。我暗搓搓的反编译了最新的Mybatis Log插件的Jar文件然而结果是源码做了混淆没有一点参考价值。在我开发SQL Dump插件之前我仔细的阅读了IDEA Plugin开发文档,要实现Mybatis Log插件输出SQL日志只需监听控制台输出事件抓取控制台输出原文然后二次加工输出即可,其缺点也非常明显就是如果控制台不输出SQL日志那么它不会有任何输出。
SQL Dump插件参考了Mysql explain插件的源码,使用java agent技术对jdbc驱动包Preparedstatement接口的实现类做了字节码插桩,通过运行时反射获取原始SQL和参数然后二次加工输出完整SQL。其优点不依赖特定框架和控制台日志输出,缺点也非常明显需要对各个jdbc驱动包实现类做插桩。所以SQL Dump仅仅只是一个实验性的项目,通过这个项目使我深入学习了java agen以及字节码插桩相关的知识。