欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot连接Oracle数据库,兼容多个数据库

程序员文章站 2022-03-19 16:06:55
连接Oracle数据库添加依赖Spring Boot项目添加MyBatis依赖和Oracle驱动: org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2<...

连接Oracle数据库

  1. 添加依赖
    Spring Boot项目添加MyBatis依赖和Oracle驱动:
<dependency>
	 <groupId>org.mybatis.spring.boot</groupId>
	 <artifactId>mybatis-spring-boot-starter</artifactId>
	 <version>1.3.2</version>
</dependency>
<dependency>
	 <groupId>com.oracle</groupId>
	 <artifactId>ojdbc6</artifactId>
	 <version>11.2.0.1.0</version>
</dependency>

此时可能会出现这个错误:Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0
这时候需要我们手动导jar包

  1. 导jar包

登录oracle,查看当前数据库版本信息
(需要管理员身份)

select * from v$instance;

SpringBoot连接Oracle数据库,兼容多个数据库

本人的数据库驱动的版本是11.2.0.1.0

下载ojdbc6.jar,用maven命令手动添加到本地仓库中

链接:https://pan.baidu.com/s/1NCrqcMlKFlP7QTBkV4UhjQ
提取码:5xwj
自己选一个版本使用~~~~本人用的是ojdbc6的版本

在cmd运行一下命令

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=E:\ojdbc6.jar

其中Dfile是jar包的路径(建议放在简单的路径,不要有特殊字符或中文)

SpringBoot连接Oracle数据库,兼容多个数据库
3. 再次在项目中导入依赖


<dependency>
       <groupId>com.oracle</groupId>
       <artifactId>ojdbc6</artifactId>
       <version>11.2.0.1.0</version>
</dependency>

此时错误解决。

  1. 再去yml文件配置信息
server:
  port: 9090
  servlet:
    context-path: /test
    
spring:
  application:
    name: test
  # 数据源
  datasource:
    url: jdbc:oracle:thin:@localhost:1521:orcl
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: oracle.jdbc.driver.OracleDriver

这样子就可以连接上oracle 了

Mysql和Oracle 兼容

1、SpringBoot启动类中添加:

@Bean
public DatabaseIdProvider getDatabaseIdProvider() {
    DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
    Properties properties = new Properties();
    properties.setProperty("MySQL", "mysql");
    properties.setProperty("Oracle", "oracle");
    databaseIdProvider.setProperties(properties);
    return databaseIdProvider;
}

2、2、Mybatis的xml标签中增加databaseId="mysql"或者databaseId=“oracle”,例如:

<select id="createTable" useCache="false" resultType="int" databaseId="mysql">
    CREATE TABLE ${tableName} (
    `id` varchar(64) DEFAULT NULL COMMENT '标识',
    `create_date` datetime DEFAULT NULL COMMENT '创建时间',
    `create_user_id` varchar(64) DEFAULT NULL COMMENT '创建人id',
    `create_user_name` varchar(64) DEFAULT NULL COMMENT '创建人姓名',
    `last_update_date` datetime DEFAULT NULL COMMENT '最后更新时间',
    `last_update_user_id` varchar(64) DEFAULT NULL COMMENT '最后更新人id',
    `last_update_user_name` varchar(64) DEFAULT NULL COMMENT '最后更新人姓名'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = #{name};
</select>

<select id="createTable" useCache="false" resultType="int" databaseId="oracle">
    CREATE TABLE ${tableName} (
    `id` varchar(64) DEFAULT NULL COMMENT '标识',
    `create_date` datetime DEFAULT NULL COMMENT '创建时间',
    `create_user_id` varchar(64) DEFAULT NULL COMMENT '创建人id',
    `create_user_name` varchar(64) DEFAULT NULL COMMENT '创建人姓名',
    `last_update_date` datetime DEFAULT NULL COMMENT '最后更新时间',
    `last_update_user_id` varchar(64) DEFAULT NULL COMMENT '最后更新人id',
    `last_update_user_name` varchar(64) DEFAULT NULL COMMENT '最后更新人姓名'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = #{name};
</select>

3、如果逻辑层需要区分数据库
在逻辑层加上变量:

(本人试过在实体类添加,无法赋值,只好在逻辑层添加)

    @Value("${my.database}")
    private String database;

同时逻辑层方法中判断:

if (StringUtils.isNotEmpty(database) && database.equals("oracle")) {
           wrapper.between("to_char(a.date,'yyyy-mm-dd hh24:mi:ss')", dto.getStartDate() + " 00:00:00", dto.getEndDate() + " 23:59:59");
} else {

           wrapper.between("a.date", dto.getStartDate() + " 00:00:00", dto.getEndDate() + " 23:59:59");
            }

需要在yml文件设置值:

my:
  database: oracle

这样就可以兼容Oracle和MySQL
(中间有蛮多的数据库特有的语法要修改)

参考文章:

SpringBoot + Mybatis 采用DatabaseIdProvider配置支持不同数据库

解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0

本文地址:https://blog.csdn.net/junxunfs/article/details/111881386