
【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
指定した正規表現に一致するかをチェックするアノテーションです。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つで便利な機能が備わっています。
数多くあるアノテーションをすべて覚える必要はないが、よく使われるアノテーションは覚えておいたほうが良いように感じました。
この記事を読んだ方が少しでもアノテーションの便利さについて知っていただけたら幸いです。