【Spring】便利なアノテーションについて知ろう②

公開日: 2025/3/19

便利なアノテーションについて知りましょう!

1. Serviceクラスに関するアノテーション


・@￰Transactional

クラスまたはメソッドに付与することで、例外が発生すると自動でロールバックされるアノテーションです。

非検査例外(RuntimeException)及びそのサブクラスが発生した場合はロールバック(実行前への巻き戻し)されますが、検査例外(Exception及びそのサブクラスでRuntimeException以外)が発生した場合は、ロールバックされずコミット(処理の確定)されます。

最初のメソッドに付与しておけばメソッドの中のメソッドも対象になります。そのため、クラスまたはメソッドに付与する場合は1つだけで問題ありません。

2. Repositoryクラスに関するアノテーション


・@￰Data

クラスに付与することで全フィールドに対してgetter/setterでアクセスすることができるようになるアノテーションです。

setter()メソッド、getterメソッド、toString()メソッド、equals()メソッド、hashCode()メソッドを自動生成します。

・@￰Entity

​​エンティティクラスであることを示すアノテーションです。

データベースのテーブルとマッピングするクラスに付与し、クラス名と同じテーブル名を生成します。

・@￰Table

テーブル名を設定するアノテーションです。

通常はクラス名と同じテーブル名のデータをマッピングするため、クラス名とテーブル名が異なる場合はマッピングしたいテーブル名を設定する。

・@￰Id

フィールドに付与し、主キーであることを示すアノテーションです。

・@￰Transient

マッピングしたくない(データベースに保存しない)フィールドに付与するアノテーションです。

・@￰Query

メソッドに付与することで任意のSQLを実行できるメソッドを用意できるアノテーションです。

アノテーションの引数にクエリを記載します。

・@￰Modifying

@￰Queryアノテーションを使ってinsert・update・deleteをする際に必ず付与しなければならないアノテーションです。

実装例
@Modifying
@Query("update User"
  "set"
  "password = :password"
  "where"
  "id = :id")
public Integer updateUser(@Param("password") String password, @Param("id") String id) ;

・@￰JoinColumn

テーブル結合時、条件となる結合先テーブルのカラム名を指定するためのアノテーションです。

結合先の情報となるフィールドに付与します。

name属性に結合先のキーとなるカラム名を指定します。

・@￰OneToOne

テーブルと結合先テーブルが一対一の関係の場合に付与するアノテーションです。

※あまり見かけないアノテーションです

・@￰OneToMany

テーブルと結合先テーブルが一対多の関係の場合に付与するアノテーションです。

※あまり見かけないアノテーションです

・@￰ManyToOne

テーブルと結合先テーブルが多対一の関係の場合に付与するアノテーションです。

※あまり見かけないアノテーションです

実装例
@Entity
public class School {
  @Id
  private long schoolId;

  private String schoolName;

  @OneToOne
  @JoinColumn(name = "schoolId")
  // schoolIdが一致するStudentエンティティを結合する
  private Student student;
}

3. バリデーションに関するアノテーション


・@￰Validated

バリデーション(入力チェック)を行いたいパラメータ・クラスに付与するアノテーションです。

・@￰GroupSequence

バリデーションの実行順を指定するアノテーションです。

左に設定されたものから実行していきます。

・@￰DataTimeFormat

フォーマットを指定することで、受け取った値を日付型に変換するアノテーションです。

・@￰NumberFormat

フォーマットを指定することで、受け取った値を数値型に変換するアノテーションです。

・@￰NonNull

nullでないことをチェックするアノテーションです。

※空文字・空白はOKになります

・@￰NotEmpty

nullまたは空文字でないことをチェックするアノテーションです。

※空白はOKになります

・@￰NotBlank

null・空文字・空白でないことをチェックするアノテーションです。

・@￰Max

指定した値以下であるかをチェックするアノテーションです。

・@￰Min

指定した値以上であるかをチェックするアノテーションです。

・@￰Size

文字列の長さやListのsizeが指定した範囲内になるかチェックするアノテーションです。

・@￰AssertTrue

trueかどうかをチェックするアノテーションです。

・@￰AssertFalse

falseかどうかをチェックするアノテーションです。

・@￰Pattern

指定した正規表現に一致するかをチェックするアノテーションです。

・@￰Email

〇〇@〇〇形式かをチェックするアノテーションです。

4. 単体テストに関するアノテーション


・@RunWith

いろんなRunnerクラスを指定できます。

Runnerクラスによってどのようなテストを行うか制御します。

・@RunWith(SpringRunnner.class)

DIを利用してテストするときに必要になります。

・@RunWith(MockitoJUnitRunner.class)

テスト対象のクラスの中でモックしたいクラスがある場合に必要になります。

※staticメソッドのモック化はできないので注意が必要です

・@DataJpaTest

エンティティとレポジトリ間だけでのテストをサポートしてくれます。

@Entityと@RepositoryのついたクラスApplicationContextへロードします。

・@AutoConfigureTestDatabase

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)とすることでアプリケーションで設定されているDBを使うことができます。

・@TestExecutionListeners

テストを監視し、様々な機能を提供するlistenerを設定できます。

5. 結合テストに関するアノテーション

・@SpringBootTest

SpringBootの機能を提供してくれます(application.propertiesファイルやymlファイルを読むことができます)

デフォルトではアプリを起動しませんが、設定すれば起動できるようになります。

6. その他に関するアノテーション

・@PathVariable

REST形式のパラメータを受け取ります。

・@RequestParam

リクエストパラメータを受け取ります。

7. まとめ


アノテーション1つで便利な機能が備わっています。

数多くあるアノテーションをすべて覚える必要はないが、よく使われるアノテーションは覚えておいたほうが良いように感じました。

この記事を読んだ方が少しでもアノテーションの便利さについて知っていただけたら幸いです。