SpringBoot入門その2Spring Data JPA

(注、この記事は書き途中です。後日更新します。)
SpringBoot入門その1を書いてから、1年以上経ってしまった(大汗)ということで、今回は1年ぶりのSpringBoot入門その2です。
今回は、Spring Data JPAによるデータベースへのアクセスとSpring Securityによる認証・認可について簡単に紹介したいと思います。
# Spring Data JPAによるデータベースへのアクセス
1. そもそもJPAとは何か
一言でいうと、Javaでの標準のO/Rマッパーです。O/Rマッパーは、ObjectとRelationを対応づける、すなわちオブジェクト指向のクラスとデータベースのテーブルを関連させるものと考えておけばいいでしょう。
例として、「顧客」というクラスがあるとします。メンバー変数としてはID(Integer、必須)、名前(String、必須)、性別(Byte、1:男 2:女)、年齢(Integer)を持っているとします。
この時、対応するcustomorテーブルはこんな感じになるでしょう。
| id | name | gender | age |
| —- | —- | —- | —- |
| 1 | 鈴木 | 1 | 28|
| 2 | 佐藤 | 2 | 30|
| 3 | 田中 | 1 | |
| 4 | 山田 | | 26|
Javaの顧客クラスからDBのcustomorテーブルに簡単にアクセスできるようにする仕組みが、JPAです。JPAには、このマッピングの他にもDBへのCRUD(Create,Read,Update,Delete)処理をカプセル化したAPIおよびJavaオブジェクトを間作するためのクエリ言語(JPQL)を持っています。
2. pom.xmlとapplication.propertiesの設定
まずは、pom.xmlに、下記の内容を追加して、「spring-boot-starter-data-jpa」を読み込ませます。

org.springframework.boot
spring-boot-starter-data-jpa

次に、application.propertiesに下記の設定をします。なお、ここではMySQLを使う場合を想定しています。


spring.datasource.url=jdbc:mysql://localhost:3306/database
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database=MYSQL
logging.level.jdbc=OFF
spring.jpa.hibernate.ddl-auto=validate

3. エンティティとリポジトリの作成
次に、エンティティクラスとリポジトリインタフェースを定義します。
エンティティクラスは、いわゆるMVCの”M”にあたるもので、以下のように定義します。


@Entity
@Table(name = "customers")
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String firstName;
private String lastName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = true, name = "username")
private User user;
}

リポジトリインタフェースはJavaからデータベースにアクセスするためのインタフェースで、次のようにします。


import com.example.domain.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface CustomerRepository extends JpaRepository<Customer, Integer> {
@Query(“SELECT x FROM Customer x ORDER BY x.firstName, x.lastName”)
List findAllOrderByName();¥
}

最低限必要なのはエンティティクラスと”org.springframework.data.jpa.repository.JpaRepository”のインポートです。これに”org.springframework.data.jpa.repository.Query”を追加でインポートすることでSQL文を作ってそれを呼び出すメソッドの定義もできるようになります。
それ以外だと、Serviceクラスを作ってそこからエンティティへの操作を定義して、それをコントローラーから呼び出すという使い方をすることが多いです。
Serviceクラスの作り方、使い方については「SpringBoot入門その3」あたりで紹介しようと思います(いつになるかわからないけど)。