JPAメモ
JPAとは
Java Persistence API のこと。
RDBへのアクセスを行うためのフレームワークで、データの永続化の機能を提供する。
対象のオブジェクトを保存するとそのオブジェクトがそのままDBに保存される。
裏側ではDBアクセスが行われているが、あまり意識しなくて良くなる。
複雑なクエリーが勝手に裏で発行されていることもあるので要注意
エンティティクラス
DBのテーブルと関連づけられるクラスのこと。
JPAでDBのレコードを扱う際にエンティティと呼ばれるクラスを定義して使用する。
エンティティクラスで使用するアノテーション
javax.persistenceパッケージを使用する
こちらがわかりやすい:http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0870/APR4/EU260052.HTM
区分 | アノテーション | 概要 | 使用方法 |
---|---|---|---|
エンティティ | @Entity | クラスがエンティティであることを示す | クラス名に付与 |
カラム | @Column | テーブルのカラムとエンティティクラスのプロパティを関連づける | @Column(table = "person", name = "name") |
カラム | @JoinColumn | 結合内容を示す。nameでどのカラムで結合するのか指定できる | @JoinColumn(name = "test") |
ID関連 | @Id | そのエンティティのPKであることを示す | PKとなるプロパティに付与 |
ID関連 | @GeneratedValue | PKのプロパティに併せて指定する。PKを自動生成する(生成方法は複数ある) | PKとなるプロパティに付与 @GeneratedValue(strategy = GenerationType.|AUTO|IDENTITY| SEQUENCE|TABLE) |
リレーション | @ManyToOne | 多対一の関連を示す | プロパティに付与 |
リレーション | @OneToMany | 一対多の関連を示す。マップ対象のテーブルをmappedByで示す | プロパティに付与 @OneToMany(mappedBy = "department") |
テーブルのマッピングは双方のエンティティクラスで行う双方向と片側で行う単方向のマッピングがある
※単方向だと検索が複雑になるため双方向を推奨
簡単なCRUD操作
インタフェース JpaRepository の実装クラスを作成する
public interface 名前 extends JpaRepository <エンティティ , ID>
IDには基本型を指定するのではなくラッパーを指定すること(Longとか)
実装クラスにはリポジトリであることを示す@Repositoryを付与すること。
インタフェースには簡単なクエリーが実装されており(select * とかinsert intoとか)、以下で確認できる
https://spring.pleiades.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html
UNIONとかJOINとかの複雑なクエリーを実行したい際は実装する必要がある
ThymeLeafの式・タグ
thymeleafの式
式 | 式の名前 | 概要 | 使い方 |
---|---|---|---|
"@{パス}" | リンクURL式 | リンク先を指定する | th:src="@{/webjars/bootstrap/js/bootstrap.bundle.min.js}" |
"${変数}" | 変数式 | 変数を指定する | th:object="${invoice}" |
"*{変数}" | 選択変数式 | *{オブジェクトのフィールド名}として使用する。th:objectタグ内でオブジェクト名が省略できるようになり、選択変数式を使用しない場合は${object名.フィールド名}となる | th:field="*{name}" |
"#{メッセージ}" | メッセージ式 | src/main/resources/messages.propertiesに記載したテキストを取り込む | th:text="#{phoneNumber}" |
タグ
タグ | 概要 | 使い方 |
---|---|---|
th:text | 変数を表示する | th:text="${変数名}" |
th:action | formでのpost先をパスで指定する | th:action="@{/パス}" |
th:object | そのフォームにバインドするオブジェクトを指定する | th:object="${オブジェクト名}" |
th:field | inputタグのid/name/valueをまとめてHTMLに出力する | th:field="${変数名}"/ "*{オブジェクトのプロパティ名}" etc… |
th:value | inputタグなどでHTMLのvalueだけ値を設定したい時に使用する | th:value="${変数名}" |
th:href/th:src | 参照先をリンクURL式で指定する | th:href/th:src="@{/webjars/bootstrap/js/bootstrap.bundle.min.js}" |
th:each | ループを回して処理する | th:each="comment:${comments}" とすると${comments}から1件ずつ取り出してcomment変数に格納する |
th:errors | エラー時に表示するエラーメッセージを指定する | th:errors="${変数名}"/"*{オブジェクトのプロパティ名}" etc… |
th:errorclass | バリデーションエラーなどがある場合にタグのclassにスタイルを追加する。エラーのチェック結果はth:fieldもしくはname属性から取得するため、これらと一緒に使う必要がある(じゃないとどこのプロパティのエラーチェックなの?がわからないため) | th:errorclass="スタイル" |
その他
要素 | 概要 | 使い方 |
---|---|---|
${変数} | インライン(文中に埋め込み)処理。th:textと同じく値を表示できる | ${test} |