hanker

iBatis - isEmpty, isNotEmpty / isNull, isNotNull 뭘 써야 할까? (빈 값 / null 체크) 본문

SPRING

iBatis - isEmpty, isNotEmpty / isNull, isNotNull 뭘 써야 할까? (빈 값 / null 체크)

hanker 2025. 3. 18. 03:01
반응형

대부분의 경우 <isEmpty> / <isNotEmpty>를 사용하면 null과 빈 문자열("")을 모두 처리할 수 있어서 편리하지만,

무조건 isEmpty만 사용하는 것이 항상 최선은 아니다.

 


<isEmpty> || <isNull>

1-1. 빈 문자열("")은 허용하고 null만 체크하고 싶을 때

- <isEmpty>는 null과 "" 모두 체크하므로, 값이 빈 문자열일 때도 조건이 실행됨

- 만약 빈 문자열("")은 허용하고 null만 체크하고 싶다면 <isNull>을 사용해야 함

<isNull property="name">
    name IS NULL
</isNull>

 

1-2. 입력값이 공백(" ")이 포함될 가능성이 있을 때

- <isEmpty>는 " "(공백이 있는 문자열)을 비어 있는 값으로 판단하지 않음.

- 예를 들어, 사용자가 " "(스페이스 한 칸)만 입력한 경우, <isEmpty>는 이를 "값이 있는 것"으로 간주하고 <isNotEmpty> 조건이 실행됨.

  > 해당 경우에 Java에서 공백을 trim() 처리하여 ""로 변환 후 iBATIS에서 <isEmpty>를 사용해야 함.

paramMap.put("name", name == null || name.trim().isEmpty() ? null : name);
 

 

1-3. DB에서 NULL과 ""를 다르게 처리하는 경우

- 일부 데이터베이스(특히 Oracle)에서는 NULL과 ""을 동일하게 취급하지만, MySQL 같은 DB에서는 다르게 취급될 수도 있음

- 예를 들어, NULL 값만 검색해야 하는 경우 <isNull>을 사용하는 것이 더 적절함.

<isNull property="email">
    email IS NULL
</isNull>

- email 값이 NULL일 때만 실행됨. 빈 문자열("")일 때는 실행되지 않음

 

 


정리
상황 사용 여부
값이 null이거나 빈 문자열("")이면 SQL 실행해야 함 사용
null만 체크하고 싶음 (빈 문자열은 허용) isNull 사용
null이 아닐 때 실행해야 하며 빈 문자열("")도 허용 isNotNull 사용
사용자가 공백(" ")을 입력할 가능성이 있음 Java에서 trim() 후 isEmpty 사용

- 대부분의 경우 null과 빈 문자열("")을 함께 체크해야 하므로 <isEmpty> / <isNotEmpty>를 사용하면 편리함.
- 하지만 null과 빈 문자열을 구분해야 하는 경우에는 <isNull> / <isNotNull>을 사용해야 함.

 

반응형