Mybatis - 过滤依赖jar中sql字符
有一个项目需要引入工作流程,引入了Activiti5,但是由于DB中间件mycat对于某些语法不支持,导致项目执行时报错。Activiti5的sql有很多distinct [TABLE_ALIAS].*
这种查询语句,由于mycat不支持,更换中间件又不可能,只能把这种语句重写。自己维护一份mybatis的xml mapper文件有很麻烦。
思路:Mybatis会把解析好的sql语句存储到SqlSource这个数据结构当中去,剩下的工作如何处理SqlSource?
一种,拦截要执行的SQL语句来做改写。使用Mybatis的Plugin的机制。借鉴PageHelper方式,连接query方法,在6个参数处改写BoundSql的sql属性,替换需要被替换掉的正则。
第二种,考虑在解析Mapper文件时, 遇到 distinct [TABLE_ALIAS].*
字符时替换成distinct [TABLE_ALIAS.COLUMNS]
这种形式。解析生成SqlSource时完成该操作。继承XMLLanguageDriver,在生成SqlSource时,做字符过滤替换