ParameterType 과 resultType

뚱이아저씨·2023년 12월 6일
0

SQL

목록 보기
1/1

resultType 이란

Dto와 매핑을 해주고 Dto에 있는 DB에 값을 저장 해주는 역할 이다.

resultType의 사용 목적

쿼리를 출력 할때의 결과 값을 매핑 하기 위해서 이다.

예를 들어 아이디 중복 체크를 하는 쿼리가 있다고 가정해보자

<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의 값중 하나를 받아와서 결과를 보여준다는 뜻이다.

parameterType

쿼리의 '#{}' 플레이스 폴더에 있는 값을 매핑 하기 위해서 이다.

parameterType의 사용 목적

'parameterType'을 명시함으로써 MyBatis는 어떤 데이터 타입을 기준으로 매핑을 수행해야 하는지를 알기 때문이다.

코드 예시

 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을 작성해도 되고 안해도 된다.

profile
뚱이아빠의 개발자도전기

0개의 댓글