データ]

1.はじめに

Spring Dataはデータストレージ技術を抽象化しています。

したがって、私たちのビジネスロジックコードは、根底にある永続性の実装からはるかに独立したものになります。また、Springは実装に依存するデータストレージの詳細の処理を単純化します。

このチュートリアルでは、Spring Data、Spring Data JPA、およびSpring Data MongoDBプロジェクトの最も一般的なアノテーションを見ていきます。

2.一般的なSpringデータの注釈

2.1.

@トランザクション

メソッドのトランザクション動作を設定したい場合は、次のようにします。

@Transactional
void pay() {}

このアノテーションをクラスレベルで適用すると、クラス内のすべてのメソッドで機能します。ただし、特定のメソッドに適用することでその効果を無効にすることができます。

それはリンクで見つけることができる多くの設定オプションを持っています:/transaction-configuration-with-jpa-spring[この記事]。

2.2.

@ NoRepositoryBean

子リポジトリに共通のメソッドを提供するという唯一の目的でリポジトリインタフェースを作成したい場合があります

もちろん、SpringがこれらのリポジトリのBeanを作成することは望ましくありません。

__ @ NoRepositoryBean


が正確にこれを実行します:

org.springframework.data.repository.Repository__の子インターフェースをマークすると、SpringはそれからBeanを作成しません。

たとえば、すべてのリポジトリに

__Optional <T> findById(ID id)

__methodが必要な場合は、ベースリポジトリを作成できます。

@NoRepositoryBean
interface MyUtilityRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
    Optional<T> findById(ID id);
}

この注釈は子インターフェースには影響しません。そのため、Springは次のリポジトリインタフェースのBeanを作成します。

@Repository
interface PersonRepository extends MyUtilityRepository<Person, Long> {}

上記の例は、Spring Dataバージョン2以降では必要ではないことに注意してください。このメソッドには、古い

T findOne(ID id)

が置き換えられています。

2.3.

@ Param


@ Param

を使用して、名前付きパラメータをクエリに渡すことができます。

@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);

パラメータは

__:name

__syntaxで参照されていることに注意してください。

その他の例については、リンク:/spring-data-jpa-query[この記事]をご覧ください。

2.4.

@ Id


__

@ Idはモデルクラスのフィールドを主キーとしてマークします。

class Person {

    @Id
    Long id;

   //...

}

実装に依存しないため、複数のデータストアエンジンでモデルクラスを使いやすくします。

2.5.

@トランジェント

このアノテーションを使用して、モデルクラス内のフィールドを一時的としてマークすることができます。したがって、データストアエンジンはこのフィールドの値を読み書きすることはできません。

class Person {

   //...

    @Transient
    int age;

   //...

}


@ Id

と同様に、

__ @ Transient

__も実装に依存しないため、複数のデータストア実装で使用すると便利です。

2.6.

@ CreatedBy



@ LastModifiedBy



@ CreatedDate



@ LastModifiedDate

これらのアノテーションを使用して、モデルクラスを監査することができます。Springは、アノテーション付きフィールドに、オブジェクトを作成した主体、最後に修正した主体、作成日、および最後の修正を主体として自動的に入力します。

public class Person {

   //...

    @CreatedBy
    User creator;

    @LastModifiedBy
    User modifier;

    @CreatedDate
    Date createdAt;

    @LastModifiedDate
    Date modifiedAt;

   //...

}

Springにプリンシパルを追加したい場合は、Spring Securityも使用する必要があります。

より詳しい説明については、リンク:/database-auditing-jpa[この記事]をご覧ください。

3. Spring Data JPAアノテーション

3.1.

@クエリ


@ Query

を使えば、リポジトリメソッドのJPQL実装を提供することができます。

@Query("SELECT COUNT(** ) FROM Person p")
long getPersonCount();

また、名前付きパラメータを使用することもできます。

@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);

その上、

__nativeQuery


引数を

true__に設定すれば、ネイティブSQLクエリを使用できます。

@Query(value = "SELECT AVG(p.age) FROM person p", nativeQuery = true)
int getAverageAge();

詳細については、リンク:/spring-data-jpa-query[この記事]をご覧ください。

3.2.

@手順

Spring Data JPAを使えば、リポジトリからストアドプロシージャを簡単に呼び出すことができます。

まず、標準のJPAアノテーションを使用してエンティティクラスでリポジトリを宣言する必要があります。

@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
        name = "count__by__name",
        procedureName = "person.count__by__name",
        parameters = {
            @StoredProcedureParameter(
                mode = ParameterMode.IN,
                name = "name",
                type = String.class),
            @StoredProcedureParameter(
                mode = ParameterMode.OUT,
                name = "count",
                type = Long.class)
            }
    )
})

class Person {}

その後、

__ name

__引数で宣言した名前でリポジトリ内でそれを参照できます。

@Procedure(name = "count__by__name")
long getCountByName(@Param("name") String name);

3.3.

@ロック

リポジトリのクエリメソッドを実行するときにロックモードを設定できます。

@Lock(LockModeType.NONE)
@Query("SELECT COUNT(** ) FROM Person p")
long getPersonCount();

利用可能なロックモード:


  • READ


  • 書きます


  • 最適化


  • OPTIMISTIC

    FORCE

    INCREMENT


  • PESSIMISTIC

    READ__


  • PESSIMISTIC

    WRITE__


  • PESSIMISTIC

    FORCE

    INCREMENT


  • 無し

3.4.

@修正


@ Modifying

でアノテーションを付けると、リポジトリメソッドでデータを変更できます。

@Modifying
@Query("UPDATE Person p SET p.name = :name WHERE p.id = :id")
void changeName(@Param("id") long id, @Param("name") String name);

詳細については、リンク:/spring-data-jpa-query[この記事]を参照してください。

3.5.

@ EnableJpaRepositories

JPAリポジトリを使用するには、それをSpringに通知する必要があります。これを

@EnableJpaRepositories.

で行うことができます。

このアノテーションを

@ Configuration

と共に使用する必要があることに注意してください。

@Configuration
@EnableJpaRepositories
class PersistenceJPAConfig {}

Springはこの

__ @ Configuration

__classのサブパッケージでリポジトリを探すでしょう。

この振る舞いは

__basePackages

__引数で変更できます。

@Configuration
@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao")
class PersistenceJPAConfig {}

また、Spring Bootがクラスパス上にSpring Data JPAを見つけた場合、これは自動的に行われます。

4. Spring Data Mongoのアノテーション

Spring DataはMongoDBとの作業をずっと簡単にします。次のセクションでは、Spring Data MongoDBの最も基本的な機能について説明します。

詳細については、/spring-data-mongodb-tutorial[Spring Data MongoDBに関する記事]のリンクを参照してください。

4.1.

@資料

このアノテーションは、クラスをデータベースに永続化したいドメインオブジェクトとしてマークします。

@Document
class User {}

また、使用したいコレクションの名前を選択することもできます。

@Document(collection = "user")
class User {}

このアノテーションはJPAの

__ @ Entity

__のMongo版のものです。

4.2.

@フィールド


@ Field

を使用すると、MongoDBがドキュメントを永続化するときに使用したいフィールドの名前を設定できます。

@Document
class User {

   //...

    @Field("email")
    String emailAddress;

   //...

}

この注釈はMongoのJPAの

__ @ Column

__に相当するものです。

4.3.

@クエリ


@ Query

を使用すると、MongoDBリポジトリメソッドで検索クエリを提供できます。

@Query("{ 'name' : ?0 }")
List<User> findUsersByName(String name);

4.4.

@ EnableMongoRepositories

MongoDBリポジトリを使用するには、それをSpringに通知する必要があります。これを

@EnableMongoRepositories.

で行うことができます。

このアノテーションを

@ Configuration

と共に使用する必要があることに注意してください。

@Configuration
@EnableMongoRepositories
class MongoConfig {}

Springはこの

__ @ Configuration


classのサブパッケージでリポジトリを探すでしょう。この振る舞いは


basePackages

__引数で変更できます。

@Configuration
@EnableMongoRepositories(basePackages = "org.baeldung.repository")
class MongoConfig {}

また、Spring Bootがクラスパス上にSpring Data MongoDBを見つけた場合、Spring Bootはこれを自動的に行います。

5.まとめ

この記事では、Springを使用して、一般的にデータを処理するために必要な最も重要な注釈はどれかを確認しました。さらに、最も一般的なJPAとMongoDBのアノテーションを調べました。

いつものように、一般的な注釈とJPA注釈についてはGitHub

ここ

、およびhttps://githubに例があります。 MongoDBアノテーションのためのcom/eugenp/tutorials/tree/master/persistence-modules/spring-data-mongodb[ここ]。




  • «** 前へ