Error code 모음/6. Jav Script errors

[MyBatis Error] 쿼리문이 정상인데 값이 안뜰 때 - resultType / resultMap

쟈누이 2020. 12. 8. 18:35
반응형

에러 상황

- 쿼리문이 정상으로 실행이 됨에도 불구하고, 값이 웹상에서 뜨지를 않았음.

 

에러 원인

- resultType 을 제대로 설정해주지 않았었음

- resultMap 을 사용하고 있었던 탓임

 

의문점

- resultType 과 resultMap 의 차이점은 무엇일까?

 

 

resultType 

이 구문에 의해 리턴되는 기대타입의 패키지 경로를 포함한 전체 클래스명이나 allias, collection 인 경우에 collection 타입 자체가 아닌 collection 이 포함된 타입이 될 수도 있다.

 

몇가지 가설을 세운 후 실험을 해본 결과, resultType 를 사용할 경우

대소문자를 가리지 않고 컬럼 값과 VO 값을 인식하여 맵핑을 해주는 것 같다.

 

그리고 ' _ ' 의 경우에는 자동으로 생략이 되게끔 설정이 된 것 같다.( 추측... )

 

대체적으로 자동 맵핑이 되기 때문에 편리

<select id="haha" resultType="hahaVO">
...
</select>


<select id="haha" resultType="int">
...
</select>

대체적으로 사용하는 상황

- 클래스명 전체를 사용하는 경우

- Alias 를 입력하는 경우

- VO, DTO 등 객체를 담을 수 있는 클래스의  경로를 명시하여 사용하는 경우

 

resultMap

외부 resultMap 의 참조명 결과맵은 MyBatis 의 가장 강력한 기능이다.

 

개발자가 직접 POJO 클래스에 맵핑, 각 요소들을 직접 맵핑해주어야 한다는 불편함이 있지만 제한없이 사용 가능

<resultMap id="hahaMap" type="hahaVO">
	<result property = "haha1" column="HAHA_ID">
</resultMap>



<select id="haha" resultMap="hahaMap">
...
</select>

 

결론

alias 를 사용하거나 VO 전체를 사용하는 경우에는 resultMap 보다는 

resultType 을 사용해야 한다.

또, resultMap 을 사용할 경우 맵핑된 파라미터들의 명칭이 불분명한채로 사용할 경우에는 값이 제대로 담기지 않아 에러가 발생하고

웹 페이지가 제대로 노출되지 않을 수 있다.

반응형