下属案例例当前结合SpringBoot 配置进行讲解。
背景:
实现一个工程里面在部署阶段支持切换不同类型数据库支持。
方案一
数据源配置
关键代码(是什么数据库,该怎么配就怎么配)
spring:
datasource:
name: test
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
# @需要修改 数据库连接及驱动
url: jdbc:mysql://127.0.0.1:3006/test?useUnicode=true&characterEncoding=UTF8
username: root
password: *****
# 使用druid数据源
driver-class-name: com.mysql.jdbc.Driver
druid:
# @需要修改校确认查询语句
validationQuery: select 'x' from dual
MyBatis 配置,关键代码【关键点1】:
关键属性:database-id
# 配置数据库
mybatis:
mapper-locations: "classpath*:mapper/*.xml"
configuration:
database-id: mysql # mysql or oracle
Sql Map 示例 关键代码【关键点2】:
关键属性:databaseId
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.wxiaoqi.security.plan.mapper.DataSourceTestMapper">
<select id="list" resultType="com.github.wxiaoqi.security.plan.entity.DataSourceTest" databaseId="mysql">
select * from data_source_test limit 1
</select>
<select id="list" resultType="com.github.wxiaoqi.security.plan.entity.DataSourceTest" databaseId="oracle">
select id,type_ as type from DATA_SOURCE_TEST
</select>
</mapper>
备注:
没有设置databaseId表示:无论当前连接的什么数据库,该条语句都能被使用。但是如上面这种情况,如果使用的mysql数据库则databaseId=mysql 且id为list的语句可以执行,而同时id也是list且没指定的databaseId的语句也可以被执行。这时系统将执行指定更加精确的databaseId=mysql且id为list的语句。
方案二
简单粗暴
数据配置
还是该怎么配置就怎么配置,这里就不重复了(参考方案一)。
SQL Map
这里建两个目录,分别是mysql、oracle,分别存放其SQL Map 文件
resources\mapper\mysql
resources\mapper\oracle

切换关键配置
#配置Mysql数据库map资源路径
mybatis:
mapper-locations: "classpath*:mapper/mysql/*.xml"
#配置Oracle数据库map资源路径
mybatis:
mapper-locations: "classpath*:mapper/oracle/*.xml"