Spring Data JPA で様々なクエリを書く方法

Spring Data JPA では findByLastname など自動でメソッドを生成してくれる機能があります。こちらの記事が詳しく記載されています。

【Spring Data JPA】自動実装されるメソッドの命名ルール – Qiita

様々なクエリを自動実装してくれていますが、それでも自分で作成した SQL を実行したいことがあります。

そんなときには @Query を使用して、SQLとメソッドをマップさせます。

Repositoryインターフェース で次のように記載します。これでいつもどおり Autowired してメソッドを使用することが出来ます。

public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where u.emailAddress = ?1")
  User findByEmailAddress(String emailAddress);
}

?1 は第一引数として指定された値が入ります。もし第二引数の指定があって使いたい場合には ?2 と記載します。

また、Spring Data JPA関係なくSQLの話になりますが、Userテーブルのエイリアスを u として記載を短くしています。

参考

Spring Data JPA – Reference Documentation