CrudRepositoryで、ユーザー名が入力パラメーターのようなユーザーのリストを提供できるメソッドを作成しようとしています(最初からだけでなく、それも含まれています)。メソッド"findUserByUsernameLike(@Param("username") String username)"
を使用しようとしましたが、Springのドキュメントで説明されているように、このメソッドは "where user.username like ?1
"と同じです。ユーザー名に...
メソッドへのクエリを作成しましたが、展開さえしません。
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
@Query("select u from user u where u.username like '%username%'")
List<User> findUserByUsernameLike(@Param("username") String username);
}
誰もこれで私を助けることができますか?
次のアプローチを使用してみてください(私にとってはうまくいきます):
@Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')")
List<String> findUsersWithPartOfName(@Param("username") String username);
注意:JPQLのテーブル名は大文字で始める必要があります。
メソッド名からのクエリ作成 を使用して、いくつかのキーワードを説明している表4を確認します。
Likeの使用:select ... like:username
List<User> findByUsernameLike(String username);
StartingWith:select ... like:username%
List<User> findByUsernameStartingWith(String username);
EndingWith:select ... like%:username
List<User> findByUsernameEndingWith(String username);
含む:select ... like%:username%
List<User> findByUsernameContaining(String username);
探している答えはnumber 4です。 @Queryを使用する必要はありません
別の方法:代わりにCONCAT
関数を使用して、二重パイプを使用できます。:lastname || '%'
@Query("select c from Customer c where c.lastName LIKE :lastname||'%'")
List<Customer> findCustomByLastName( @Param("lastname") String lastName);
どこでも、接頭辞、接尾辞、またはその両方を置くことができます
:lastname ||'%'
'%' || :lastname
'%' || :lastname || '%'
List<User> findByUsernameContainingIgnoreCase(String username);
ケースの問題を無視するため
以下の使いやすい(CONCATまたは||を使用する必要はありません):
@Query("from Service s where s.category.typeAsString like :parent%")
List<Service> findAll(@Param("parent") String parent);
ドキュメント: http://docs.spring.io/spring-data/jpa/docs/current/reference/html .
あなたのケースでは、JPAメソッドを直接使用できます。それは怒鳴るようなものです。
含む:select ... like%:username%
List<User> findByUsernameContainingIgnoreCase(String username);
ここで、IgnoreCaseは、ケースを無視してアイテムを検索するのに役立ちます。
関連する方法を次に示します。
いいねfindByFirstnameLike
…ここでx.firstnameは?1のようになります
StartingWithfindByFirstnameStartingWith
…ここで、x.firstnameは?1のようになります(パラメーターが付加された%でバインドされます)
EndingWithfindByFirstnameEndingWith
…ここで、x.firstnameは?1のようになります(パラメーターの先頭に%が付加されます)
含むfindByFirstnameContaining
…ここで、x.firstnameは?1のようになります(パラメーター境界は%でラップされます)
これがあなたを助けることを願っています:)
この方法は私にとってはうまくいきます(Spring Bootバージョン2.0.1リリースを使用):
@Query("SELECT u.username FROM User u WHERE u.username LIKE %?1%")
List<String> findUsersWithPartOfName(@Param("username") String username);
説明:?1、?2、?3などは、1番目、2番目、3番目のパラメーターなどのプレースホルダーです。この場合、パラメーターは、標準のSQLクエリであるが、単一引用符。
@Query("select u from user u where u.username LIKE :username")
List<User> findUserByUsernameLike(@Param("username") String username);