当前位置:首页 > 技术人生 > 编程技术 > 正文内容

MyBatis如何切换不同类型数据库?

2021-08-22编程技术451

下属案例例当前结合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

image.png

 切换关键配置

#配置Mysql数据库map资源路径

mybatis:
    mapper-locations: "classpath*:mapper/mysql/*.xml"

#配置Oracle数据库map资源路径

mybatis:
    mapper-locations: "classpath*:mapper/oracle/*.xml"

扫描二维码推送至手机访问。

本站内容仅供学习研究,转载请以链接形式注明,如有侵犯请联系处理。

本文链接:https://strivers.cn/post/58.html

分享给朋友:

发表评论

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。