본문 바로가기
웹개발지식쌓기

MyBatis - selectOne으로 가지고 올 때 result가 null인 경우

by developer_j 2022. 10. 21.
728x90
반응형

selectOne으로 가지고 올 때, result가 null인 경우

mybatis 매퍼.xml에서 resultType을 int 가 아닌 Integer 로 받아줘야 한다. int 로 받으면 DAO단에서 null 오류가 뜬다

 

보통 resultType을 int로 쓸 때는, 카운트 쿼리와 함께 리스트를 조회하고 결과 값을 가져왔었는데

이번 케이스는 내가 특정 조건에 맞는 코드값(PK도 아닌 단순 숫자)만 불러와야 했다. 그래서 resultType을 int로 하려고 했는데 오류남..!

 

예를 들면 내가 '나만의 소스'라는 테이블에 데이터를 넣을 수 있고,  나는 소스 인덱스만 보여주고 싶은 상황

<select id="getMySourceIndex" parameterType="String" resultType="int">
    SELECT MY_SRC_INDEX
    FROM MY_SRC
    WHERE MBR_ID = #{memberId}
</select>

resultType 을 int → Integer로 변경

<select id="getMySourceIndex" parameterType="String" resultType="Integer">
    SELECT MY_SRC_INDEX
    FROM MY_SRC
    WHERE MBR_ID = #{memberId}
</select>

 

이렇게 바꾸고, 결과 객체를 처리하는 java 소스 단에서 if 문을 사용해 널일 경우 0으로 값이 초기화 되도록 했다..

Integer mySourceIndex = mySourceInfoDao.getMySourceIndex(memberId);

if(mySourceIndex == null) {
    mySourceIndex = 0;
}

 

 

그렇다. 카운트 쿼리는 어차피 검색결과가 없으면 숫자가 0으로 반드시 리턴되니까 괜찮지만 

count 함수를 쓰는게 아닌데 숫자형의 데이터만 리턴받고 싶은 경우 Integer을 사용해야 한다는 것을 알게됐당

하지만 이런식으로 integer로 리턴타입을 받기보다는 VO 객체로 받아서 그냥 setter/getter 함수를 사용하는 게 확장성에서 본다면 더 나을 것 같다는 생각이 들었다. (당장은 이 값만 필요하다고 생각했지만 나중에 다른 추가사항이 있을 수 있으니)


그래서 최 종 소 스

<!-- returnType을 객체로 변경 -->
<select id="getMySourceInfo" parameterType="String" resultType="MySourceInfoVO">
    SELECT MY_SRC_INDEX
    FROM MY_SRC
    WHERE MBR_ID = #{memberId}
</select>
MySourceInfoVO mySourceInfoVO = mySourceInfoDao.getMySourceInfo(memberId);

if(mySourceInfoVO == null) {
    mySourceInfoVO = new MySourceInfoVO();	// 결과객체 null 일경우 초기화
}
728x90
반응형