天天看點

SpringBoot連接配接Oracle資料庫,相容多個資料庫

連接配接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,需要管理者身份

sqlplus / as sysdba
           

輸入賬号密碼

SpringBoot連接配接Oracle資料庫,相容多個資料庫

檢視目前資料庫版本資訊

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、SQL Server 相容

1、SpringBoot啟動類中添加:

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

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

(中間有蠻多的資料庫特有的文法要修改)

連接配接SQL Server時的錯誤

在連接配接SQL Server時,一直報錯連接配接不上,錯誤如下圖:

SpringBoot連接配接Oracle資料庫,相容多個資料庫

我一直把關注點放在2上面,一直百度2的錯誤(Unable to start web server; ),一直都沒有解決。

後面經提醒,才知道關注點應該是1(對象名 ‘sys.sequences’ 無效。),我看錯重點了~~~~

發現jpa對于資料庫的版本識别出了問題。

·

查閱jpa的配置參數spring.jpa.database-platform能用來指定資料庫版本。

·

在application.properties檔案中,配置

spring.jpa.database-platform=org.hibernate.dialect.SQLServer2008Dialect

這樣才連接配接上了SQL Server~~~~

參考文章:

SpringBoot + Mybatis 采用DatabaseIdProvider配置支援不同資料庫

解決Maven導入Oracle驅動出現Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0

JPA在sqlserver2008下缺少sys.sequences的解決辦法