springboot项目同时支持oracle和mysql

一、面临问题
        当前项目的开发全部是基于MySQL5.7。最近项目需要技术支持另外一所高校,学校使用的生产数据库是Oracle11。因此,昨天我使用Docker安装了Oracle11。项目组里的另外一位大佬引进了一项技术,并且讲述了原理。这里我也记下基本使用情况。具体原理以后再弄。

        我这里的代码展示了如何同时支持Oracle与MySQL数据库。

        步骤非常简单。分为两步。

        第一步就是为系统添加一个配置。源代码加载过程我就不贴了。

import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.util.Properties;
 
@Configuration
public class DateSourceConfg {
 
    /**
     * 自动识别使用的数据库类型
     * 在mapper.xml中databaseId的值就是跟这里对应,
     * 如果没有databaseId选择则说明该sql适用所有数据库
     */
    @Bean
    public DatabaseIdProvider getDatabaseIdProvider() {
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties properties = new Properties();
        properties.setProperty("Oracle", "oracle");
        properties.setProperty("MySQL", "mysql");
        databaseIdProvider.setProperties(properties);
        return databaseIdProvider;
    }
 
}
            第二步,在Mybatis的XML中,为某个具体的SQL语句添加databaseId标签。如下,假设我有两个Id相同的SQL语句。以前的话,就会报Id重复的错。现在,如果数据源是Mysql驱动,那么就会访问databaseId为mysql的SQL语句。如果是Oracle驱动,那么Mybatis就访问databaseId为oracle的SQL语句。

    <select id="getUserById" databaseId="mysql"
            parameterType="java.lang.Long" resultType="com.tyzhou.login.model.User">
        select
         id,
         username,
          age
        ,now() currentTime
        from t_user
        where id = #{id,jdbcType=BIGINT}
    </select>
 
    <select id="getUserById" databaseId="oracle"
            parameterType="java.lang.Long" resultType="com.tyzhou.login.model.User">
        select
        id,
        username,
        age,
        sysdate currentTime
        from t_user
        where id = #{id,jdbcType=BIGINT}
    </select>
————————————————
原文链接:https://blog.csdn.net/yanluandai1985/article/details/104013936

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值