Spring DBアクセス技術(2)


JPA


JPAは既存の重複コードだけでなく、基本的なSQLもJPA自身が作成して実行します.
JPAを使用すると、SQLとデータ中心の設計からオブジェクト中心の設計に移行できます.
JPAを使うことで開発生産性を大幅に向上させることができます.
優先パラメータ
build.gradeファイルにJPA関連ライブラリを追加します.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
jpaライブラリの内部にはjdbc関連ライブラリも含まれているため、jdbcライブラリは削除されます.
またgradleを変更する場合は必ず再ロードしてください.
application.JPA設定をpropertiesに追加することもできます.
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
show-sqlはjpaで生成されたsqlの出力であり、ddl-autoはテーブルを自動的に生成する機能を提供する.noneを使用する場合は作成しません.createを使用する場合は、エンティティ情報に基づいてテーブルを作成します.
エンティティマッピング
  • JPAを使用して、テーブルにマッピングするクラスに@Entity宣言を追加します.
  • @Id宣言マッピング
  • プライマリ・キー(pk)を使用します.
  • プライマリ・キーを割り当てる場合、@GenerateValueを使用してデータベース内でプライマリ・キーを自動的に生成できます.
  • (鍵生成ポリシーはidentity以外にもたくさんあります.)

    JPA会員庫
    JPAはEntityManagerによって操作され、EntityManagerは管理エンティティのクラスです.
    クラスと変数を次のように設定します.

    saveはpersist()を使用してエンティティを格納します.

    次に、クエリー機能を持つ方法を示します.

    find()の場合、識別子(pk)のみでデータをクエリーできるため、プライマリ・キー以外の値でクエリーするにはJPQLを使用する必要があります.
    つまり、JPQLはテーブルではなくオブジェクトを検索するクエリーであり、JPAはJPQLを分析してSQLを生成し、DBでクエリーします.
    サービス
    スプリングは、このクラスのメソッドを実行するとトランザクションを開始し、メソッドが正常に終了するとトランザクションをコミットします.実行時に異常が発生した場合は、ロールバックします.
    JPAによるすべてのデータ変更は、トランザクションで実行する必要があります.
    したがって、サービスにトランザクションを追加します.

    構成をJPAに変更

    図に示すように、エンティティーマネージャを追加し、JpaMemberRepositoryを空に登録します.
    テストコードの実行により、正常に動作していることを確認できます.

    SpringデータJPA


    Spring Data JPAは、SpringでのJPAの使いやすさをサポートするプロジェクトです.
    ライブラリ内の実装クラスがなく,インタフェースだけで開発が完了する.
    また、CRUDも提供しています.
    環境設定はJPAと同じです.
    Spring Data JPAメンバーライブラリ

    図に示すようにインタフェースを作成します.
    Spring Data JPAでは、インプリメンテーションが自動的に生成され、空に登録されます.基本的な共通実装体はいずれも新しい周期を生成するので,一般的に使用できる.
    他の非汎用インプリメンテーションを使用する場合は、メソッド名を使用してクエリーを作成できます.
    (FindByEmailなどSpringデータJPAは自動的にJPQLを生成します.)
    設定

    SpringData JPAはSpringBinとして自動的に登録されるので、図のように簡単にできます.
    同様に、テストコードの実行によっても良好に動作していることがわかります.
    実際にJDbctemplate、jpa、springdatajpaはよく使われるので、さらに勉強する必要があります.
    ソース:インフラストラクチャSpring入門-コード学習を使用したSpring Boot、Web MVC、DBアクセス技術
    https://www.inflearn.com/course/スプリング-入門-スプリング起動/講座/49598?tab=curriculum