쿼리를 출력 할때의 결과 값을 매핑 하기 위해서 이다.
예를 들어 아이디 중복 체크를 하는 쿼리가 있다고 가정해보자
<select id = "checkId"
resultType = "int">
SELECT *
FROM TB_MEMBER
WHERE
OID = #{OID}
라고 가정을 했을 때 쿼리의 결과값은 '0'아니면 '1'이 나온다 여기에서
resultType을 int 로 해준 것은 쿼리의 결과 값이 '0'아니면 '1'로 나오기 때문에 int로 정해준것이다.
또 다른 예시를 들어 보자
<select id = "getMemberView"
resultType = "com.java.orix.dto.MemberDto">
SELECT *
FROM TB_MEMBER
WHERE SEQ = #{param1}
<select>
라고 가정을 했을 때
쿼리가 값을 출력 할때 MembereDto에 저장되어 있는 SEQ의
값을 찾아와서 출력을 해주기 때문에 resulttype을 MemberDto로 한것이다.
SEQ(시퀀스)의 결과 값은 'int','String','boolean'이 아니고
해당 쿼리의 결과가 어떤 타입으로 나오는지 알 수 없기 때문에 MemberDto 타입으로 매핑 한것이다.
즉, 출력의 값을 어디에다가 매핑을 할 것인지를 정해주는 것이다.
더 자세하게 말하면 쿼리의 출력 값을 어떤 타입에다가 매핑을 해서
그 출력한 결과의 값을 어디다가 보여줄 것인지를 정하는 것이다.
정의를 하자면 'resulType'은 SQL 쿼리의 결과를 어떤 자바 객체에 매핑할지를 정한다.
쿼리의 결과를 어떤 형태로 받을지를 정하는 역할을 한다.
쿼리에서 resultType을 MemberDto 타입으로 받는다는 이야기는 Dto타입에
저장되어 있는 DB의 값중 하나를 받아와서 결과를 보여준다는 뜻이다.
코드 예시
public ArrayList<MemberDto> getMemberList(MemberDto memberDto);
Dao의 매개변수를 MemberDao로 정해주면 쿼리의 parameterType도 MemberDto가 된다.
<select id="getMemberList" parameterType="com.example.MemberDto" resultType="com.example.MemberDto">
<!-- 쿼리 내용 -->
</select>
이렇게 하게 되면 Mybatis는 'getMemberList'메서드에 전달된
'MemberDto'객체를 기반으로 SQL쿼리를 실행하게 된다.
그러면 이렇게 말할 수 있을 것이다.
parameterTypedms Mybatis에게 해당 SQL쿼리의 '#{}'플레이스홀더에
대응되는 값을 어떤 타입으로 추출해야 하는지 알려주는 역할을 한다면서 왜
insert쿼리 작성할때 왜 parameterType을 써주지 않느냐
그 이유는 inset 쿼리의 경우에는 복잡한 구조가 아니라서 단일 객체에 매핑할 필요가
없을 때가 많아 insert쿼리를 작성할 때는 거의 parametertype을 사용하지 않는다.
그렇기 때문에 insert쿼리를 작성할 때 parametertype을 작성해도 되고 안해도 된다.