myBatis if문에서 null 체크

yoondgu·2022년 8월 3일
1

오류 기록

목록 보기
9/10

동적 SQL문을 작성하는데,
if문에 적은 내용이 !=null 말고 빈문자열 여부도 확인해주어야 하는 경우였다.

그런데 아래와 같이 쓰니 조건식이 제대로 작동하지 않았다.

<if test="city != null and city != ''">
	and a.city_id = #{city}
</if>

검색해보니 이는 if문에 객체에 대한 표현식을 문자열로 쓸 수 있게 해주는, OGNL의 문제였는데
OGNL에서는 ''를 string이 아닌 char로 읽기도 하는 문제가 있다고 한다.
그래서 이럴 때는 쌍따옴표와 홑따옴표를 바꿔 써주면 된다.
(빈문자열 뿐만 아니라 다른 표현식에 대해 한글자 홑따옴표를 쓸 때도 주의해야 할 문제일 것이다.)

<if test='city != null and city != ""'>
	and a.city_id = #{city}
</if>

다른 방법으로는 쌍따옴표를 HTML코드로 바꿔 적거나, 홑따옴표로 쓴 값에 toString()을 해주는 방법도 있다고 한다.
그런데 매번 이렇게 null, 공백 check를 해주는 것이 번거로울 경우
문자열 값에 대해 null, 공백 check를 해주는 static 메소드를 별도 클래스에 정의해서 if문에서 호출할 수도 있다.
이런 식으로 말이다.

<if test="@test.com.MybatisCheck@notEmpty(city)">
	and a.city_id = #{city}
</if>

아래 링크들을 통해 이 내용들을 알게 되었다.
https://cofs.tistory.com/96 - 홑따옴표, 문자 1글자 이슈 관련
https://cofs.tistory.com/97 - null,공백 체크 static 함수 정의하기
당장 필요하지는 않아 아직 사용해보지는 않은 방법이지만, 다음에 써보려고 기록해둔다.

0개의 댓글