SpringBoot+Mybatis——适配⽀持各种各样数据库的⽅法
使⽤mybatis的databaseId属性直接配置多数据库⽀持
注意事项:
1、本⽂针对的是多数据库切换,⽽⾮多数据源切换;
2、本⽂所使⽤的⽅法是在配置⽂件中配置好需要使⽤的数据库,⽽不是在项⽬运⾏以后随时切换,若要切换数据库,需要修改配置⽂件并重启项⽬。
⼤家阅读本⽂前请注意以上两条事项,确定本⽂内容是否符合你的功能要求,再决定是否继续阅读本⽂。
接下来进⼊正题,⾸先是数据库配置,直接按照常规的配法就可以了,例如:
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.sql.jdbc.Driver
⽽要想使⽤databaseId的话,需要增加⼀个bean的配置,如下:
import java.util.Properties;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import t.annotation.Bean;
import t.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean
myspring是什么意思public DatabaseIdProvider getDatabaseIdProvider() {
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties p = new Properties();
p.setProperty("DM DBMS", "dm7");
p.setProperty("MySQL", "mysql");
databaseIdProvider.setProperties(p);
return databaseIdProvider;
}
}
在这段代码中,给Properties设置了两个对象,对应着两种数据库,⼀个是达梦7,⼀个是mysql。key的值是对应的数据库的productName,value则是⼀个⾃定义的值,你可以取⼀个你喜欢的名字,这个名字会在mybatis的mapper⾥⾯⽤到。
⽽在这⾥,也要说到⽂章开头时说过的问题。使⽤databaseId来配置多数据库的⽅法⽹上很多,但是我到的所有⽂章,都没有说到,这个Properties的key和value到底是什么意思,有没有什么规范。⽽且
⽹上⼏乎都是⽤oracle和mysql来做例⼦,但没有提到其他数据库的配置⽅法,这就导致我们在使⽤类似达梦数据库的时候,完全不知道该怎么配置。后来我了官⽅资料,并结合百度到的信息,得出的结论是,Properties的key就是数据库的productName。既然知道了这⼀点,后⾯就好办了,百度到了数据库获取productName 的⽅法后,⾃然也就可以获取到达梦数据库的productName值了,具体⽅法如下:不仅仅是达梦数据库,任何数据库都是这样获取的。
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
public class Test {
public static void main(String[] args) throws Exception {
String driver = "sql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/";
String username = "root";
String password = "root";
Class.forName(driver);
Connection con = (Connection) Connection(url,username,password);
DatabaseMetaData metaData = (DatabaseMetaData) MetaData();
System.out.println("数据库的产品名称:" + DatabaseProductName());
}
}
获取到了productName,我们就可以在配置类中将我们需要的数据库配置好,然后再mapper⾥写sql时,加上databaseId,例如:
这样⼀来,配置就完成了,启动项⽬也可以正常使⽤了,在最后,还要提⼀下mybatis对databaseId的处理⽅式。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.st.UserMapper">
<select id="findUsers" resultType="com.st.UserEntity" databaseId="dm7">
select * from "demo";
</select>
<select id="findUsers" resultType="com.st.UserEntity" databaseId="mysql">
select * from demo;
</select>
</mapper>
mybatis在进⾏mapper注⼊时,会出现3种情况,该sql的databaseId和当前数据源的databaseId⼀样,该sql的databaseId和当前数据源的databaseId不⼀样,或者该sql没有配置databaseId。mybatis装配时,当同⼀⽅法被到多个sql时,会优先使⽤databaseId相同的sql,如果没有databaseId相同的sql,再使⽤没有配置databaseId的sql。databaseId不对应的sql是不会使⽤的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论