素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【SQL不要】SpringBoot2で「JPA」を使ってテーブル結合(INNER JOIN)してデータベースの情報を取得しよう【アノテーションベース】

投稿日: 2019年4月21日
最終更新日:

スポンサーリンク

336×280




JPAを使ってみよう

O/R Mapperを使ってみよう

前回はFlywayを使ったDB構築の自動化についてご紹介しました。

今回はJPAを利用したデータベースからの参照処理のO/R Mappingを実装してみようと思います。

JPAとは?

JPAは正式にはJava Persistence APIと呼び、Java EE標準のO/R MappingおよびDAOの技術仕様の事を指します。

Java Persistence API(JPA)とは、関係データベースのデータを扱う Java SE および Java EE のアプリケーションを開発するためのJava用フレームワークである。

JPA は、以下の3つの部分から成る。

API(javax.persistence パッケージで定義されている)
Java Persistence Query Language
オブジェクト/関係メタデータJava Persistence API – Wikipedia

また、JPAはあくまで仕様なので実際にはEclipseLink,Hibernate ORM,Apache Open JPAなどのライブラリを使うことになると思います。

今回は、SpringBootでJPAを利用する際にデフォルトで仕様されるHibernateを使ってみようと思います。

手順

マッピングするテーブル構造

今回も前回作成したテーブル構造をベースにマッピングしていきます。

今回の目的は、ユーザー一覧を取得するためにマッピングテーブルであるcurrent_account_infomationsテーブルを軸に取得してこようと思います

今回利用するJPAアノテーション

JPAは基本的にアノテーションベースでマッピングの設定をしていきます。

今回登場するのは以下のアノテーションです。

アノテーション 概要
@Column( name = {カラム名} ) フィールドにマッピングするDBのカラム名をname属性で設定する
@Enumerated( EnumType.STRING ) Enumにカラムをマッピングしたい場合に設定する
@Entity テーブルと対応するEntityクラスに設定する
@Table( schema = {スキーマ名}, name = {テーブル名} ) Entityクラスに紐付けたいテーブル情報を設定する
@EmbeddedId PKカラムを紐付けたいクラスを参照する際に設定する
@Embedded PKではないカラムを紐付けたいクラスを参照する際に設定する
@OneToOne 1…1のテーブルを結合したい際に設定する
※今回はテーブル定義情報は1..1~nだが、こちらを使うことでやりたいことは実現出来た
@ManyToOne N…0~1のテーブルを結合したい際に設定する
@JoinColumn( name = {カラム名} ) 結合する際のFKカラム名を指定したい場合に設定する
@AttributeOverride(name = {上書き対象フィールド}, column = @Column(name = {上書き後の値} ) ) 紐付けるEntity内のフィールドのカラム定義を上書きする
※今回のテーブル定義としては自テーブルと参照元によって同じコンテキストでも冗長的記述を端折るために異なるカラム名を付与しているので利用しています

開発用afterMigrateデータ

今回はローカル開発動作確認用として、以下のデータを投入します。

期待値としてはマッピングテーブルを用いて(新)のものだけ取得出来ればOKです。

依存関係の追加

まずはgradleの依存関係にJPAを追加していきましょう。

Valueプロジェクトの修正

次にValueモデルを修正します。

Entityプロジェクトの修正

次にEntityモデルを修正します。

Datasourceプロジェクトの修正

APIプロジェクトの修正

modelパッケージ

serviceパッケージ

apiパッケージ

動作確認

では、実際にエンドポイントを叩いてみましょう!

一覧

詳細

無事にテーブル結合が行われて、複数テーブルのデータをレスポンスモデルに変換して取得することが出来ました♪

参考

現場至上主義 Spring Boot2 徹底活用

Spring Data JPAプログラミング入門

終わりに

以上のように、JPAの仕組みやマッピング方法や結合方法さえわかれば、SQLを書くことなくデータの取得が可能になります。

他にもJPAには便利な機能が搭載されていますので、是非使ってみてください♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , ,

blogenist

Author: blogenist