spring+mybatis配置根据连接不同的数据库执行不同的sql
spring+mybatis配置根据连接不同的数据库执行不同的sql
背景
spring项目,第一版使用sql server数据库,第二版要加入mysql数据库,但是部署文件相同,不做大修改。
实现
首先加入mysql数据库的配置
-
pom添加mysql的连接包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency>
-
properties加入mysql连接配置
#allowMultiQueries=true开启多条insert #serverTimezone=Asia/Shanghai设置时区,国内可选上海和香港 jdbc.type=mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://url:ip/dbname?allowMultiQueries=true&serverTimezone=Asia/Shanghai jdbc.username=username jdbc.password=password
-
spring配置bean
<bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="Microsoft SQL Server">sqlserver</prop> <prop key="MySQL">mysql</prop> </props> </property> </bean> <bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> <property name="properties" ref="vendorProperties" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="databaseIdProvider" ref="databaseIdProvider" /> <property name="mapperLocations" value="classpath*:/mappings/**/*.xml"/> <property name="configLocation" value="classpath:/mybatis-config.xml"/> </bean>
-
上图中vendorProperties中的key值是固定的,源码给出的解释如下 MySQL
public String getDatabaseProductName() throws SQLException { try { return "MySQL"; } catch (CJException var2) { throw SQLExceptionsMapping.translateException(var2, this.getExceptionInterceptor()); } }
Microsoft SQL Server
public String getDatabaseProductName() throws SQLServerException { this.checkClosed(); return "Microsoft SQL Server"; }
SQLite
public String getDatabaseProductName() { return "SQLite"; }
-
还剩最后一步,在mapper中配置映射关系 加入databaseId,匹配该sql需要使用的数据库类型
<select id="selectRegion" resultType="hashmap" databaseId="sqlserver"> select getdate() </select> <select id="selectRegion" resultType="hashmap" databaseId="mysql"> select now() </select>
根据实际情况,切换数据库
下一篇:
MySQL表的增删查改(适合初阶学习)