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

IT

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

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

ねこじゃすり

created by Rinker
PEPPY(ペピイ)
¥3,850 (2024/04/03 21:33:13時点 Amazon調べ-詳細)

猫を魅了する魔法の装備品!

【最新機種】GoPro hero11 Black

created by Rinker
GoPro(ゴープロ)
¥62,000 (2024/04/03 21:42:08時点 Amazon調べ-詳細)

最新機種でVlogの思い出を撮影しよう!

[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット

created by Rinker
THE NORTH FACE(ザノースフェイス)
¥33,430 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

防水暴風で耐久性抜群なので旅行で大活躍です!

ドラゴンクエスト メタリックモンスターズギャラリー メタルキング

created by Rinker
スクウェア・エニックス(SQUARE ENIX)
¥3,250 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

みんな大好き経験値の塊をデスクに常備しておこう!

Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK

created by Rinker
Bauhutte(バウヒュッテ)
¥14,935 (2024/04/03 21:42:10時点 Amazon調べ-詳細)

メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!

BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール

created by Rinker
BANDAI SPIRITS(バンダイ スピリッツ)
¥7,500 (2024/04/03 21:42:14時点 Amazon調べ-詳細)

もう一人の僕を呼び覚ませ!!

MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド

created by Rinker
MOFT
¥2,880 (2024/04/03 21:42:18時点 Amazon調べ-詳細)

Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!

スポンサーリンク

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

関連記事

YouTubeも見てね♪

お名前.comサイドバー