조회 api에서 빈칸으로 들어온 필드에 대해 검색 처리 시 무시하고 싶을 때 처리 방법
@Query(
"select u "+
" from user u " +
" where (:searchId is null or u.id = :searchId) "+ //Long 타입 처리 시
" and (coalesce(:searchSeq, null) is null or m.seq = :searchSeq)" + //String 타입이면서 =연산 비교인 경우는 미리 빈칸 파라미터 null로 변환 필요
" and (coalesce(:searchUserName, null) is null or g.name like %:searchUserName%) " + //String 타입이면서 like 연산 비교인 경우
" and (coalesce(:searchUserEmail, null) is null or g.email like %:searchUserEmail%) "
)
조건필드 is null or
조건을 사용한다.
@Query(
"select u "+
" from user u " +
" where (:searchId is null or u.id = :searchId) "+
)
""
)이면 null로 변환한다.prmMap.get("search_emp_no") == "" ? null: (String)prmMap.get("search_emp_no")
조건필드 is null or
조건과 함께 coalesce
함수를 이용한다.@Query(
"select u "+
" from user u " +
" where (coalesce(:searchEmpNo, null) is null or g.mallCd = :searchEmpNo)"
)
coalesce 함수가 하는 일은?
coalesce(a, b, c ...) 입력 시 a, b, c 순서로 순회하면서 null이 아닌 첫 번째 값을 리턴하는 함수. 전부 null이면 null을 리턴.
조건필드 is null or
조건과 함께 coalesce
함수를 이용한다.
@Query(
"select u "+
" from user u " +
" where (coalesce(:searchUserName, null) is null or g.name like %:searchUserName%) " +
" and (coalesce(:searchUserEmail, null) is null or g.email like %:searchUserEmail%) "
)
조건이 많아 지니까 mybatis보다 jpql이 더 복잡해저벌임