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数据库
- 添加依赖
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包
- 导jar包
登录oracle,查看当前数据库版本信息
(需要管理员身份)
select * from v$instance;
本人的数据库驱动的版本是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包的路径(建议放在简单的路径,不要有特殊字符或中文)
3. 再次在项目中导入依赖
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
此时错误解决。
- 再去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