mybatis-plus的注解@TableName中动态切换schema实现
一、应用场景
为了解决频繁切换模式名的问题,通过配置的形式动态绑定schema到实体类上,减少修改代码的问题。
基于DM(适用于mysql)切换模式名,针对不同的schema。
二、实现方式
1、在配置文件中定义schema变量,并把值写入
2、在配置类中使用@Bean注入到容器中,然后就可以拿到配置中的值了
3、然后@TableName中和mapper.xml中就可以以${}的形式使用这两个变量了
4、实际遇到的问题
采用这种方式在实际运行中出现了一些bug,sql中的表名会出现${}.xxx的问题,经过排查发现,在使用MP的默认方法中saveOrUpdate()和selectById()这两个方法会出现这样的问题,目前没有发现其他方法出现这样的异常。最后使用这两个方法的时候,select采用手写的sql保存和更新使用save()和update()方法解决。
5、其他方式
在解决这个问题的时候,第一种方式是重写初始化TableName时的方法,查看源码发现,该方法为静态方法,第一种行不通。
第二种,写一个工具类在sql预编译的时候拦截并进行模式名替换,实际操作后发现工作量也蛮大的(因为是多模式,和sql的类型需要各种判断),此种方式遂卒。
第三中,网上经验,这种基于MP的3.4.2版本以上,@TableName的属性增加了schema。具体操作见链接mybatis-plus 3.4.2版本注解@TableName中动态schema实现-CSDN博客