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);
-
시작 : 선택 … like : username %
List<User> findByUsernameStartingWith(String username);
-
EndingWith : 선택 … like % : username
List<User> findByUsernameEndingWith(String username);
-
포함 : 선택 … like % : username %
List<User> findByUsernameContaining(String username);
당신이 찾고있는 답이 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 방법을 직접 사용할 수 있습니다. 그것은 다음과 같습니다.
포함 : 선택 … like % : username %
List<User> findByUsernameContainingIgnoreCase(String username);
여기서 IgnoreCase 는 케이스를 무시하고 항목을 검색하는 데 도움이됩니다.
다음은 몇 가지 관련 방법입니다.
-
처럼
findByFirstnameLike
… x.firstname like? 1
-
로 시작
findByFirstnameStartingWith
… 여기서 x.firstname like? 1 (파라미터는 %가 추가됨)
-
EndingWith
findByFirstnameEndingWith
… 여기서 x.firstname은? 1 (앞에 %가 붙은 매개 변수)
-
포함
findByFirstnameContaining
… 여기서 x.firstname like? 1 (파라미터 경계가 %로 래핑 됨)
이것이 당신을 도울 것입니다 🙂
답변
이 방법은 나를 위해 작동합니다 (Spring Boot 버전 2.0.1. RELEASE 사용).
@Query("SELECT u.username FROM User u WHERE u.username LIKE %?1%")
List<String> findUsersWithPartOfName(@Param("username") String username);
설명 😕 1,? 2,? 3 등은 첫 번째, 두 번째, 세 번째 매개 변수 등의 자리 표시 자입니다.이 경우 매개 변수를 표준 SQL 쿼리 인 것처럼 %로 둘러싸기에 충분하지만 작은 따옴표.