连接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

输入账号密码

sqlite springboot集成 springboot集成oracle数据库_oracle

查看当前数据库版本信息

select * from v$instance;

sqlite springboot集成 springboot集成oracle数据库_sqlite springboot集成_02

本人的数据库驱动的版本是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包的路径(建议放在简单的路径,不要有特殊字符或中文)

sqlite springboot集成 springboot集成oracle数据库_sqlite springboot集成_03


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时,一直报错连接不上,错误如下图:

sqlite springboot集成 springboot集成oracle数据库_bc_04


我一直把关注点放在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的解决办法