혜야의 코딩스토리

[Mybatis] 동적쿼리 (if test) 문자열 처리 본문

꿈 : 멋진 개발자 🧸/DB

[Mybatis] 동적쿼리 (if test) 문자열 처리

hyeya_ 2023. 11. 10. 14:00

java단에서 map_yn을 String 타입의 "Y"로 넘겼을 때,

//java
String map_yn = "Y";
requestMap.put("map_yn", map_yn);

 

둘 중 어떻게 비교하는 것이 옳을 까요?

<!-- 첫 번째 방법 -->
<if test='map_yn eq "Y"'></if>
<!-- 두 번째 방법 -->
<if test="map_yn eq 'Y'"></if>

 


<!-- 첫 번째 방법 -->
<if test='map_yn eq "Y"'></if>

<!-- 실제 동작 -->
<if test='"Y" eq "Y"'></if>

정답은 첫 번째 방법입니다!

String과 String이 비교되므로 정상적으로 실행됩니다.

 

<!-- 두 번째 방법 -->
<if test="map_yn eq 'Y'"></if>

<!-- 실제 동작 -->
<if test=""Y" eq 83"></if>

반면에, 두 번째 방법은

싱글쿼테이션이 붙은 'Y'를 83으로 인식하여 비교하므로, 정상적으로 실행되지 않습니다.

 

싱글쿼테이션(' ')의 경우, 먼저 문자가 한 글자인지, 두 글자 이상인지를 체크합니다.

만약, 문자가 두 글자 이상 (ex. 'YES') 이라면, 내부적으로 typeHandler에 따라 String형태로 변환되어 값을 비교합니다.

 

'Y'는 문자가 한글자이므로, 해당 값을 아스키코드 값으로 인식하여

아스키코드 S에 해당하는 십진수 값 83으로 인식합니다.

 

아래 아스키 코드표를 참고바랍니다.

 

아스키 코드표(ASCII Table)