LIKE를 사용한 Spring JPA @Query
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 쿼리 인 것처럼 %로 둘러싸기에 충분하지만 작은 따옴표.
@Query("select u from user u where u.username LIKE :username")
List<User> findUserByUsernameLike(@Param("username") String username);
@Query("select b.equipSealRegisterId from EquipSealRegister b where b.sealName like %?1% and b.deleteFlag = '0'" )
List<String>findBySeal(String sealname);
이 코드를 시도했고 작동합니다.
참고 URL : https://stackoverflow.com/questions/21456494/spring-jpa-query-with-like
'IT TIP' 카테고리의 다른 글
Angular 표현식에서 문자열을 Int로 구문 분석하려면 어떻게해야합니까? (0) | 2020.10.27 |
---|---|
phpmyadmin에서 대용량 SQL 파일을 가져 오는 방법 (0) | 2020.10.27 |
600851475143에 대한 "정수 숫자가 너무 큽니다"오류 메시지 (0) | 2020.10.27 |
Android 선형 레이아웃-요소를 하단에 유지하는 방법? (0) | 2020.10.27 |
iOS7에서 UISearchBar의 배경색을 변경하는 방법 (0) | 2020.10.27 |