Spring BootのWEBアプリケーションを開発する際、なんらかのデータベースにアクセスすることが多いが、SpringのJPAライブラリを利用すると、少ないコード量でDBアクセス処理の記述を行うことができる。
ただし、データベースアクセスが行えるようにするには、Oracle JDBCに接続するjarファイルの追加や、build.gradleの設定変更も必要になってくる。
今回は、最もよく使われているOracleデータベースからデータを取得し、その結果を表示するサンプルプログラムを作成してみたので、共有する。
前提条件
以下の記事のSpring BootのWEB画面用アプリが作成済であること。
また、以下の記事のlombokの設定が完了していること。
やってみたこと
Oracle XEのインストール
「Oracle XE」を利用すると、無料でOracleのデータベースを利用できるので、Oracle XEのインストールを行った。
Oracle XEのインストール手順は、以下を参照のこと。ただし、最新の18cをインストールしようとしたところ失敗してしまったので、今回は、以前のバージョンの「Oracle Database Express Edition 11g Release 2」をインストールした。
接続用テーブルの作成とデータ追加
今回作成するサンプルプログラムがアクセスするテーブル「user_data」を作成した。実行したSQLは以下の通り。
create table user_data (
id number(6) primary key not null,
name varchar2(40) not null,
birth_year number(4) not null,
birth_month number(2) not null,
birth_day number(2) not null,
sex char(1) not null
);
insert into user_data values (1, 'テスト プリン', 2012, 2, 28, '2'); insert into user_data values (2, 'テスト プリン2', 2013, 3, 19, '1'); commit;
Oracle JDBC接続用jarの配置
Oracle JDBCに接続するjarファイルは、Oracle XEをインストール後の以下の場所に配置されている。

上記のうちの「ojdbc6.jar」を、サンプルプログラムのdemoプロジェクト下、libフォルダ下に配置する。今回作成したサンプルプログラムの構成は以下の通りで、「ojdbc6.jar」は下図上方のlibフォルダ内を参照のこと。

build.gradleにOracle接続用定義を追加
今回のサンプルプログラムでは、Oracle接続用jarとJPAライブラリが必要になるので、build.gradleに「spring-boot-starter-data-jpa」と「ojdbc6.jar」の定義を追加する。
追加後の「build.gradle」は以下の通りで、下2行がOracle接続用jarとJPAライブラリの定義となる。
plugins {
id 'org.springframework.boot' version '2.1.7.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compile files('lib/ojdbc6.jar')
}
その他、今回もlombokが必要になるので、その定義も追加している。lombokについては以下のサイトを参照のこと。
サンプルプログラムの作成と実行
作成したサンプルプログラムの構成は、「Oracle JDBC接続用jarの配置」に記載した通りとなる。
まず、Oracleに接続するための接続情報を、application.propertiesに追加した。追加したプロパティファイルの内容は以下の通り。
server.port = 8084 # DB接続情報 spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=USER01 spring.datasource.password=USER01 spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
次に、Oracleに接続する際にJPAを利用するため、テーブル「user_data」アクセス用エンティティクラスと、JPAアクセス用リポジトリを作成した。そのプログラムの内容は以下の通り。
package com.example.demo;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
/**
* ユーザーデータテーブル(user_data)アクセス用エンティティ
*/
//テーブル名を「@Table」アノテーションで指定
//「@Data」アノテーションを付与すると、このクラス内の全フィールドに対する
//Getterメソッド・Setterメソッドにアクセスができる
@Entity
@Table(name="user_data")
@Data
public class UserData {
/** ID */
//主キー項目に「@Id」を付与し、その値を自動生成するにはアノテーション
//「@GeneratedValue(strategy = GenerationType.AUTO)」を付与する
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
/** 名前 */
private String name;
/** 生年月日_年 */
//カラム名を「@Column」アノテーションで指定
@Column(name="birth_year")
private int birthY;
/** 生年月日_月 */
@Column(name="birth_month")
private int birthM;
/** 生年月日_日 */
@Column(name="birth_day")
private int birthD;
/** 性別 */
private String sex;
}package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* ユーザーデータテーブル(user_data)アクセス用リポジトリ
*/
// JpaRepositoryクラスを継承することによって、ユーザーデータテーブル(user_data)への
// select, insert, delete, updateを行うメソッドを自動で生成してくれる
@Repository
public interface UserDataRepository extends JpaRepository<UserData, Long> {
}エンティティクラスでは、クラスに「@Entity」アノテーションを付与することと、主キー項目に「@Id」アノテーションを付与することが必須である。また、リポジトリは、JpaRepositoryインタフェースを継承する必要がある。
また、JPAアクセス用リポジトリの呼出は、コントローラクラスで行っている。そのプログラムの内容は以下の通り。ここでは、初期表示時にユーザーデータテーブルの全データを取得し、userDataListに格納できるよう、UserDataRepositoryクラスのfindAllメソッドを呼び出している。
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
public class DemoController {
/**
* ユーザーデータテーブル(user_data)へアクセスするリポジトリ
*/
@Autowired
private UserDataRepository repository;
/**
* ユーザーデータテーブル(user_data)の全データを取得して返却する
* @return ユーザーデータリスト
*/
@ModelAttribute("userDataList")
public List<UserData> userDataList(){
return repository.findAll();
}
/**
* 初期表示画面に遷移する
* @return 初期表示画面へのパス
*/
@RequestMapping("/")
public String index(){
return "index";
}
}
また、ユーザーデータテーブルから取得した結果を表示するHTMLファイルの内容は、以下の通り。ここでは、userDataListの値を一覧で表示するために、th:eachタグを利用している。また、それぞれのデータを表示するために、th:textタグを利用している。
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>index page</title>
</head>
<body>
ユーザーデータテーブル(user_data)の全データ<br/><br/>
<table border="1" cellpadding="5">
<tr>
<th>ID</th>
<th>name</th>
<th>birthYear</th>
<th>birthMonth</th>
<th>birthDay</th>
<th>sex</th>
</tr>
<tr th:each="obj : ${userDataList}">
<td th:text="${obj.id}"></td>
<td th:text="${obj.name}"></td>
<td th:text="${obj.birthY}"></td>
<td th:text="${obj.birthM}"></td>
<td th:text="${obj.birthD}"></td>
<td th:text="${obj.sex}"></td>
</tr>
</table>
</body>
</html>その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-oracle/demo
作成したサンプルプログラムを実行した結果は以下の通りで、Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスすると、ユーザーデータテーブル(user_data)のデータが画面上に表示されることが確認できる。

要点まとめ
- Spring BootのアプリケーションでOracle接続を行うためには、build.gradleに、「spring-boot-starter-data-jpa」と「ojdbcXX.jar」の定義を追加する。
- Oracle接続用の定義は、「application.properties」に追加する。
- Oracleに接続する際にJPAを利用できるようにするには、テーブルにアクセスするエンティティクラスと、JPAアクセス用リポジトリを追加する。
- JPAで全データを取得するには、JPAアクセス用リポジトリのfindAllメソッドを利用する。
- HTML上でリストのデータを一覧表示するには、th:eachタグでリストの各データを取得し、取得したデータの各変数はth:textタグで表示する。






