SpringBoot连接Oracle数据库,兼容多个数据库 谁借莪1个温暖的怀抱¢ 2022-12-31 07:29 590阅读 0赞 ## 连接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 输入账号密码 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70] 查看当前数据库版本信息 select * from v$instance; ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 1] 本人的数据库驱动的版本是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包的路径(建议放在简单的路径,不要有特殊字符或中文) ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 2] 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时,一直报错连接不上,错误如下图: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 3] 我一直把关注点放在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配置支持不同数据库][SpringBoot _ Mybatis _DatabaseIdProvider] [解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0][Maven_Oracle_Missing artifact com.oracle_ojdbc6_jar_11.2.0.1.0] [JPA在sqlserver2008下缺少sys.sequences的解决办法][JPA_sqlserver2008_sys.sequences] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70]: /images/20221120/da530f155a5c4df484a439e71d4e9b28.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20201229102306261.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20201229102606692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz_size_16_color_FFFFFF_t_70 3]: https://img-blog.csdnimg.cn/20210105143957242.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bnh1bmZz,size_16,color_FFFFFF,t_70 [SpringBoot _ Mybatis _DatabaseIdProvider]: http://www.cicis.com.cn/13f231f363964fa6959abc0656a6e63c.html [Maven_Oracle_Missing artifact com.oracle_ojdbc6_jar_11.2.0.1.0]: https://blog.csdn.net/qq_19640525/article/details/85691066 [JPA_sqlserver2008_sys.sequences]: https://www.lefer.cn/posts/18830/
还没有评论,来说两句吧...