我正在尝试在CrudRepository中创建一个方法,它将能够为我提供用户列表,其用户名是LIKE输入参数(不仅以开头,还包含它).我尝试使用方法"findUserByUsernameLike(@Param("username") String username)"
但是在Spring文档中告诉我,这个方法等于" where user.username like ?1
".这对我来说并不好,因为我已经告诉我,我正试图让所有用户名包含的用户...
我写了一个查询方法,但它甚至没有部署.
@Repository public interface UserRepository extends CrudRepository{ @Query("select u from user u where u.username like '%username%'") List 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中的表名必须以大写字母开头.
易于使用的代码(无需使用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。
List<User> findByUsernameContainingIgnoreCase(String username);
为了忽略案件问题
另一种方式:代替CONCAT
函数我们可以使用双管:: lastname || '%'
@Query("select c from Customer c where c.lastName LIKE :lastname||'%'") List<Customer> findCustomByLastName( @Param("lastname") String lastName);
您可以放置任何位置,前缀,后缀或两者
:lastname ||'%' '%' || :lastname '%' || :lastname || '%'
使用方法名称创建查询,检查表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);
请注意,您要找的答案是4号.您不必使用@Query
对于您的情况,可以直接使用JPA方法。就像下面这样:
包含:选择...,例如%:username%
List<User> findByUsernameContainingIgnoreCase(String username);
在这里,IgnoreCase将帮助您在不区分大小写的情况下搜索项目。
以下是一些相关方法:
喜欢 findByFirstnameLike
…其中x.firstname像?1
从...开始 findByFirstnameStartingWith
…其中x.firstname如?1(参数与附加%绑定)
结尾于 findByFirstnameEndingWith
…其中x.firstname如?1(参数与前缀%绑定)
内含 findByFirstnameContaining
…其中x.firstname如?1(参数绑定在%中)
更多信息,请查看此链接和此链接
希望能帮到你 :)