Spring Boot プロジェクトでの JPA の使用

1. Spring Data JPAの統合

Spring Boot はスターター spring-boot-starter-data-jpa を提供します。プロジェクトで JPA を使用するにはスターターを追加するだけです。次のステップごとに、Spring Data JPA を統合するために必要な構成を示します。

ステップ 01 JPA 依存関係を追加します。

まず、新しい Spring Boot プロジェクトを作成し、JPA 関連の依存関係をプロジェクトの pom.xml に追加します。具体的なコードは次のとおりです。

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

上記の例では、spring-boot-starter-data-jpa の参照に加えて、MySQL ドライバー mysql-connector-java にも依存する必要があります。

ステップ 02設定ファイルを追加します。

application.properties でデータ ソースと JPA の基本的な関連プロパティを構成します。具体的なコードは次のとおりです。

spring.datasource.url=jdbc:mysql://Localhost:3306/ceshi?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#JPA配置
spring.jpa.properties.hibernate.hbm2ddl.auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#SQL输出
spring.jpa.show-sql=true
#format 下SQL输出
spring.jpa.properties.hibernate.format_sql=true

上記のパラメータのうち、主にデータベース接続と JPA プロパティを設定するためのものです。以下では、JPA の 4 つの構成の分析に焦点を当てます。

1) spring.jpa.properties.hibernate.hbm2ddl.auto: この構成は、データベース テーブル構造を維持するためにエンティティ クラスの特定の動作を構成するためによく使用されます。サービスの初回起動時にはデータベースに対応するテーブルが生成され、その後サービスを起動する際、エンティティクラスに属性が追加されていれば、データに対応するフィールドが追加され、元のデータが復元されます。まだ存在します。

  • update: エンティティ クラスの属性が変更されると、それに応じてテーブル構造が更新されることを示す一般的に使用される属性。
  • create: 起動時に最後に生成されたテーブルを削除し、エンティティ クラスに基づいてテーブルを再生成することを意味します。以前のテーブルのデータはクリアされます。
  • create-drop: 起動時にエンティティ クラスに基づいてテーブルが生成されますが、sessionFactory が閉じられるとテーブルが削除されることを示します。
  • validate: 起動時にエンティティ クラスとデータ テーブルが一致しているかどうかを検証することを示します。
  • none: 何もしません。

2) spring.jpa.show-sql: デバッグを容易にするために、動作中に Hibernate が実際の SQL ステートメントをコンソールに出力することを示します。

3) spring.jpa.properties.hibernate.format_sql: 表示しやすいようにフォーマットされた出力 JSON 文字列を表します。

4) spring.jpa.properties.hibernate.dialect: テーブル名を生成するストレージ エンジンを InnoDB として指定します。

ステップ03エンティティクラスを追加します。

まず、エンティティ クラスであり、データベース内のテーブル構造を定義するクラスである User エンティティ クラスを作成します。サンプル コードは次のとおりです。

@Entity
@Table(name= "Users")
public class User {
    
    
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;
    @Column(length = 64)
    private String name;
    @Column(length = 64)
    private String password;
    private int age;

    public User() {
    
    

    }
    public User(String name,String password, int age) {
    
    
        this.name=name;
        this.password=password;
        this.age=age;
    }

    public Long getId() {
    
    
        return id;
    }

    public void setId(Long id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    @Override
    public String toString() {
    
    
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

上記の例では、@Table アノテーションを使用してデータベース内のテーブルをマップし、@Column アノテーションを使用してデータベース内のフィールドをマップします。具体的な手順は次のとおりです。

1) @Entity: このクラスがデータベース テーブルに対応することを示す必須のアノテーション。

2) @Table: オプションのアノテーション。テーブル名、インデックス情報など、データベース エンティティに対応するテーブル情報を宣言します。ここでは、このエンティティクラスに対応するテーブル名が Users であることが宣言されています。指定しない場合、テーブル名とエンティティ名は一貫性を保ち、 @Entity アノテーションと組み合わせて使用​​されます。

3) @Id アノテーション: エンティティの一意の識別子に対応する属性を宣言します。

4) @Column アノテーション: エンティティ属性を宣言するために使用されるテーブル フィールドの定義。デフォルト エンティティの各属性はテーブル内のフィールドに対応し、フィールド名はデフォルトで属性名と一致します。フィールドのタイプは、エンティティ属性のタイプに自動的に対応します。ここでは主に文字フィールドの長さを宣言しますが、このように宣言されていない場合、システムはフィールドの長さとして 255 を使用します。

5) @GeneratedValue アノテーション: データベースの主キーの自動生成ルールを設定します。Strategy 属性には 4 つの値があります。

  • AUTO: 主キーはプログラムによって制御され、デフォルトのオプションです。
  • IDENTITY: 主キーはデータベースによって自動的に生成されます。つまり、データベース ID は自動的に増分されます。Oracle はこの方法をサポートしていません。
  • SEQUENCE: データベースのシーケンスを通じて主キーを生成し、@SequenceGenerator アノテーションを通じてシーケンス名を指定します。MySQL はこの方法をサポートしていません。
  • テーブル: 特定のデータベース テーブルを通じて主キーを生成する この戦略を使用すると、アプリケーションをデータベースに簡単に移行できます。

エンティティのアノテーションには、上記で使用した @Entity アノテーション、@Table アノテーションなどの他に、一般的に使用されるものがいくつかあり、具体的な説明を表 9-1 に示します。これらのアノテーションは、エンティティオブジェクトとデータベースフィールドの対応を記述するために使用されますが、JPA と MyBatis では相違点があるため、混同しないように注意してください。

ここに画像の説明を挿入します
ステップ 04テスト検証。

以上でJPAを統合するための設定は完了です、設定完了後、プロジェクトを起動すると図のような内容がログに出力されます。

ここに画像の説明を挿入します
図からわかるように、システムは起動後に自動的にデータベースに接続し、データ テーブル構造を作成し、実行された SQL ステートメントを出力します。データベースを確認すると、データベース内の対応する Users テーブルも正常に作成されていることがわかります。これは、プロジェクトが JPA を正常に統合し、エンティティ テーブルを作成したことを示しています。

2. JPaRepository の概要

JpaRepository は Spring Data JPA の非常に重要なクラスです。Spring Data の統合データ アクセス インターフェイスであるRepositoryを継承し、追加、削除、変更、クエリなどの完全なデータ操作メソッドを実装します。JpaRepositoryでは30以上のデフォルトメソッドが用意されており、プロジェクト内のデータベース操作機能を基本的に満たすことができます。

JpaRepository は、Spring Data JPA テクノロジーを実装してデータベースにアクセスするための重要なインターフェイスです。JpaRepository は PagingAndSortingRepository インターフェースを継承し、PagingAndSortingRepository インターフェースは CrudRepository インターフェースを継承します。CrudRepository および Repository インターフェイスは Spring Data の下部にある共通インターフェイスであり、ほぼすべてのデータベース インターフェイス メソッドを定義し、データ アクセス操作を統合します。

さらに、JPA は、カスタム クエリ、カスタム SQL、名前付きクエリ、その他のデータ クエリ メソッドを含む、非常に完全なデータ クエリ関数を提供します。

3. 実戦:人事情報管理モジュールの実装

JpaRespository は、追加、削除、変更、確認などの完全なデータ操作をデフォルトで実装します。リポジトリ データ アクセス インターフェイスを定義し、JpaRepository クラスを継承するだけです。以下に、以前に作成した User クラスとテーブルを使用して、ユーザーの追加、削除、変更、確認の機能を実装するユーザー管理モジュールの実装を示します。

1. リポジトリの定義

UserRepositoryインタフェースを作成し、@Repositoryアノテーションを付与し、JpaRepositoryクラスを継承することで、コードを記述することなく人事情報管理モジュールのすべての機能を実現できます。具体的なサンプルコードは以下の通りです。

@Repository
public interface UserRepository extends JpaRepository<Users, Long> {
    
    

}

UserRepository にはメソッドが定義されていませんが、JpaRepository を継承すると、当然のことながら JpaRepository 内のすべてのメソッドが定義されていることがわかります。

2. 新規追加、変更、削除、クエリの実装

(1) 新規

次に、UserRepositoryTests 単体テスト クラスを作成し、ユーザーの新しいテスト メソッドを実装します。サンプルコードは次のとおりです。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
    
    
    @Resource
    private UserRepository userRepository;

    @Test
    public void testSave() {
    
    
        User user = new User("ysxq","123456",40);
        userRepository.save(user);
    }
}

上記の例では、UserRepository オブジェクトが UserRepositoryTests 単体テスト クラスに挿入され、JpaRespository で事前に生成された save() メソッドを使用して人事データを保存する機能が実装されています。以下に示すように:

ここに画像の説明を挿入します

ここに画像の説明を挿入します

(2) 修正

変更と追加の両方に save() メソッドを使用し、データ エンティティを渡すだけです。JPA は主キー ID に基づいてユーザーデータを自動的に変更します。サンプルコードは次のとおりです。

    @Test
    public void testUpdate() {
    
    
        User user = userRepository.findById(1L).get();
        user.setPassword("z123456");
        userRepository.save(user);
    }

(3) 削除

削除も非常に簡単で、JpaRespositoryがあらかじめ生成しているdelete()メソッドを使用しますが、オブジェクトを直接削除することもできますし、deleteByXXXメソッドを使用することもできます。サンプルコードは次のとおりです。

    @Test
    public void testDetle() {
    
    
        User user = new User("ysxq","123456",40);
        userRepository.delete(user); 
    }

ここに画像の説明を挿入します

(4) お問い合わせ

JPA はデータ クエリを完全にサポートしています。事前に生成された findById()、findAll()、findOne() などのメソッドがあり、カスタマイズされた単純なクエリを使用したり、SQL クエリをカスタマイズしたりすることもできます。サンプルコードは次のとおりです。

    @Test
    public void testSelect() {
    
    
        userRepository.findById(1L);
    }

3. 検証試験

[テストの実行] をクリックするか、メソッドを右クリックして [Run 'UserRepositoryTest'] コマンドを選択して、すべてのテスト メソッドを実行します。結果は図に示すとおりです。

ここに画像の説明を挿入します
結果は、人事情報の追加、削除、変更、クエリの単体テストがすべて正常に実行され、対応するクエリ結果が出力され、JPAを利用して人事情報管理機能が実装されていることがわかります。

おすすめ

転載: blog.csdn.net/weixin_45627039/article/details/132753289