1、linux服务器(阿里云服务器,CentOS 7.3 64位 ),并利用docker安装好oracle;
2、服务器远程连接工具(Xshell 5);
3、数据库管理工具(navicat for oracle);
4、java ide(IntelliJ IDEA 2017);
5、oracle驱动(ojdbc-6.jar);
6、maven(apache-maven-3.2.3),配好阿里云镜像;
7、springboot v2.1.0.RELEASE;
8、jdk1.8.0_74
一直用springboot+mysql开发比较多,第一次使用springboot+oracle开发。由于数据库的差异走了一些弯路,本文会着重比较下2种数据库在springboot上开发的差异。
pom.xml
4.0.0
com.itaem
cms_o
0.0.1-SNAPSHOT
jar
cms_o
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.1.0.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-jdbc
org.springframework.boot
spring-boot-starter-test
test
com.oracle
ojdbc6
1.0
org.springframework.boot
spring-boot-maven-plugin
差异1:pom文件oracle驱动的引入,这也是最大的坑,文章后面会讲到
application.yml(配置文件)
server:
port: 8080
servlet:
context-path: /cms_o
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@YourServerIP:1521:xe
username: system
password: oracle
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.Oracle10gDialect
差异2:在配置文件上数据库连接信息的填写
驱动为:oracle.jdbc.driver.OracleDriver,若报错,则说明oracle驱动依赖未正确引入
url格式:jdbc:oracle:thin:@YourServerIP:端口号:sid
username:system
password:oracle
由于在docker搭建oracle,username、password、sid分别默认为system、oracle、xe
jdbc:代表以jdbc的方式连接;
oracle:表示连接的是oracle数据库;
thin:表示连接时采用thin模式(oracle中有两种模式);
@表示地址;
localhost:1521:orcl中localhost代表本地数据库,1521代表本地数据库端口号,orcl代表本地数据库的sid。
关于thin的解释:
thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动的jar包就行。thin就是纯粹用Java写的ORACLE数据库访问接口。
oci是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端。oci是Oracle Call Interface的首字母缩写,是ORACLE公司提供了访问接口,就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度
快,但是需要安装和配置数据库。
Person.java(实体类)
package ...Entity;
import javax.persistence.*;
@Entity
@Table(name="person")
public class Person {
@Id
@GeneratedValue
@Column(nullable = false, unique = true)
private Integer id;
@Column(length = 32)
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
PersonRepository.java(jpa仓库)
package ...repository;
import ...Person;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
public interface PersonRepository extends CrudRepository, JpaSpecificationExecutor {
Person findByIdAndName(Integer id, String name);
List findByName(String name);
}
PersonRepositoryTest.java(测试类)
package com.itaem.cms_o.dao;
import ...entity.Person;
import ...repository.PersonRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonRepositoryTest {
@Autowired
private PersonRepository personDao;
@Test
public void test() {
Person person = new Person();
person.setId(1);
person.setName("zhangsan");
personDao.save(person);
System.out.println(person);
// boolean bool = personDao.existsById(1);
// System.out.println(bool);
// System.out.println("hello");
}
@Test
public void test2() {
Person person = personDao.findByName("zhangsan").get(0);
System.out.println(person);
}
@Test
public void test3() {
Person person = personDao.findByIdAndName(21, "zhangsan");
System.out.println(person);
}
}
运行代码如上所示,若启动类、测试类各方法正常运行
用navicat查看数据库是否有变动(表的位置在system的表里)
到此,springboot+oracle搭建完成
可见,springboot还是很强大的,对oracle也能很好地支持。有了jpa,就省去了很多手写sql的麻烦。本文只写到dao层,后面service和controller层就跟mysql没什么大差别了。
————————————————————————分割线—————————————————————————————
接下来谈谈搭建这个项目遇到的坑:
虽然能在maven仓库里搜索到,但貌似不能用,原因是oracle是要收费的,不能通过远程的方式来引入,只能通过配置本地库来加载到工程里。下面讲解如何配置本地库加载到工程:
1)下载oracle的驱动jar包:
oracle官网地址:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
事先声明的是,oracle驱动的版本要与jdk的版本相匹配(本文ojdbc-6.jar与jdk1.8,亲测可行),若版本差异过大,则抛版本不匹配的异常
链接:https://pan.baidu.com/s/1IejeuRbwBlQATphIgQulJw
提取码:0t9u
这里可以使用博主提供的jar包
2)将oracle驱动包打包到本地仓库
得到jar包后,打开cmd,输入以下maven命令
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=1.0 -Dpackaging=jar -Dfile=你的jar包路径
groupId、artifactId、version就是maven的gav坐标,因为是打包到本地仓库,理论上是可以随便定的,但名字也不要起得一点关联都没有,不然以后就搞不懂这个依赖是干嘛用的了
packaging:打包方式,这里为jar
-Dfile=后面接的是你驱动包的实际路径
3)在pom.xml添加maven依赖
注意groupId、artifactId、version即gav坐标要与命令输入的相一致,然后reimport一下pom文件即可
ps:确认idea上配置的maven仓库跟你打包的maven仓库相一致,不然还是会报错