Bootstrap

springboot项目中给mybatis添加全局变量,在xml中使用

springboot中给mybatis添加全局变量

在springboot项目的开发中,有些场景是查询固定的数据库中的表,一般是这样写的

 可以看到以库名.表名这种方式虽然能实现需求,但是如果后面库的名字改了或者迁移到别的库的话,就要在每一个sql里面把库名改掉,非常麻烦。
我所用的方法是通过读取spring的配置文件(application.yml)的某个属性存入mybatis的全局变量中。再通过使用这个全局变量实现动态切库的功能。

一.普通的springboot项目

1.修改配置文件

首先在配置文件中加入以下配置:
在这里插入图片描述
configuration-properties下面可以添加多个全局变量,都是key:value的形式。
tips:如果使用的是mybatis-plus框架,则需要改成:
在这里插入图片描述

2.在sql语句中直接使用

sql语句的库名.表名直接可以替换为${key}.表名
在这里插入图片描述

 

二.使用了自定义sqlSession配置的springboot项目

在配置了自定义sqlsession的项目中,就不能在application.yml里添加全局变量了,不会生效!不会生效!不会生效!
自定义sqlsession配置就是类似这种:

 我们需要找到注解类似@Bean(name = “SqlSessionFactory”)的那个方法,我这里是这个方法

然后在里面加上这三行

        Properties pro = new Properties();
        pro.setProperty("自定义的key","自定义的value");
        bean.setConfigurationProperties(pro);

 就可以设置全局变量了,当然只针对配置里配置的范围生效

当然这样写是写死的值,下面演示把application里的值给拿进来:
首先在application.yml里定义了一个key:value

在这里插入图片描述 

然后在配置类里注入spring的环境变量Environment
在这里插入图片描述

然后通过 environment.getProperty() 来获取applicaiton里的值
比如我这里想拿到这个db_app的值就要写成environment.getProperty(“constant.db_app”)

完整代码:  

 Properties pro = new Properties();
        pro.setProperty("db_app",environment.getProperty("constant.db_app"));
        bean.setConfigurationProperties(pro);

最后在配置范围内的包下的sql里面就可以使用了

 

 

————————————————
版权声明:本文为CSDN博主「打牌拯救世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cyw666a/article/details/130641157

;