티스토리 뷰

MyBatis를 사용해서 select를 날렸을때 결과에 null이 나오면, 이에 대해 null을 허용할지 안할지를 설정을 통해 할 수 있다. null이 나온다고 하는건 column이 될 수도 있고 row가 될 수도 있다. 잘 이해가 안갈수도 있어서 예시를 들어 설명하자면 사용자 table이 있다고 하고 이중 특정 컬럼만 조회를 했을때 다음과 같은 결과가 나왔다. 

select 결과 null

빨간 네모를 친 부분은 row 의 모든 항목이 null인 것이고 파란 네모를 친 부분은 column 만 null 인 경우이다. 결과가 null인 경우 MyBatis에서는 별도의 설정을 하지 않으면 생략을 해버리기 때문에 원하는 결과가 나오지 않을 수 있다. 그럴때는 MyBatis 설정을 통해 내가 원하는 상황에 맞게 조치를 해주자. 


select 결과 column이 null일 경우 생략되는 현상 조치

위의 테이블을 MyBatis의 설정 변경 없이 그대로 조회해와서 Result로 받은 것을 살펴보면 다음과 같았다. 

[{EMP_NO=11111, MAIL_ADDR=11111@naver.com}, 
{EMP_NO=22222, MAIL_ADDR=22222@naver.com}, 
{EMP_NO=33333}, 
null, 
{EMP_NO=44444, MAIL_ADDR=44444@naver.com},
{EMP_NO=55555, MAIL_ADDR=55555@naver.com}, 
null,
{EMP_NO=66666, MAIL_ADDR=66666@naver.com}, 
{EMP_NO=77777}]

column이 null일 경우는 3, 9 line인데 결과를 보면 아예 MAIL_ADDR 이라는 컬럼 자체가 출력이 되지 않는다. MAIL_ADDR이 null이라도 출력되기를 원한다면 mybatis-config.xml 파일(MyBatis 설정파일)에서 다음을 추가해주자. 

<settings>
    <setting name="callSettersOnNulls" value="true"/>
</settings>

이렇게 설정하고 다시 조회를 해보면 다음과 같은 결과를 받을 수 있다.

[{EMP_NO=11111, MAIL_ADDR=11111@naver.com}, 
{EMP_NO=22222, MAIL_ADDR=22222@naver.com}, 
{EMP_NO=33333, MAIL_ADDR=null}, 
null, 
{EMP_NO=44444, MAIL_ADDR=44444@naver.com},
{EMP_NO=55555, MAIL_ADDR=55555@naver.com}, 
null,
{EMP_NO=66666, MAIL_ADDR=66666@naver.com}, 
{EMP_NO=77777, MAIL_ADDR=null}]

이런식으로 아까는 null일때 MAIL_ADDR 자체가 생략이 되었었는데 이제는 출력이 되는것을 확인 할 수 있다. 


select 결과 row가 null일 경우 생략되는 현상 조치

위의 테스트 결과에서도 나타났듯이 조회 결과의 row가 null 인 경우는 그냥 null로 출력이 된다. 이 경우에도 컬럼명에 null을 매핑하여 출력을 하고 싶을때는 mybatis-config.xml 파일(MyBatis 설정파일)에서 다음을 추가해주자. 

<settings>
    <setting name="callSettersOnNulls" value="true"/>
    <setting name="returnInstanceForEmptyRow" value="true"/>
</settings>

returnInstanceForEmptyRow 속성을 true로 설정을 해준다. 기본값은 false이다. callSettersOnNulls도 마찬가지다. 

이 속성을 넣고 다시 결과값을 받아보면 다음과 같다. 

[{EMP_NO=11111, MAIL_ADDR=11111@naver.com}, 
{EMP_NO=22222, MAIL_ADDR=22222@naver.com}, 
{EMP_NO=33333, MAIL_ADDR=null}, 
{EMP_NO=null, MAIL_ADDR=null}, 
{EMP_NO=44444, MAIL_ADDR=44444@naver.com},
{EMP_NO=55555, MAIL_ADDR=55555@naver.com}, 
{EMP_NO=null, MAIL_ADDR=null}, 
{EMP_NO=66666, MAIL_ADDR=66666@naver.com}, 
{EMP_NO=77777, MAIL_ADDR=null}]

이런식으로 아까는 그냥 null로만 들어갔던 값이 {EMP_NO=null, MAIL_ADDR=null} 로 들어가는것을 확인할 수 있다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31