MyBatis如何切换不同类型数据库?
下属案例例当前结合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"