일단 parameterType만쓰고 parameterMap은 비권장됨( 오피셜 )
# parameterMap
parameterMap은 외부 parameterMap을 찾기 위한 비권장된 접근방법으로서
인라인 파라미터 매핑과 parameterType을 대신 사용하길 권장함
# parameterType
parameterType - 구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래스명이나 별칭
( 별칭은 설정파일에 등록하면 사용가능. vo,to등을 등록해야 전체 패키지명을
써야하는 불편함을 없앰 )
( 이외에도 자바타입의 내장된 별칭이 존재함( 대소문자 구분 )
String -> string
Integer -> int, integer
Map -> map
HashMap -> hashmap
Collection -> collection
ArrayList -> arraylist
)
parameterType에는 VO,TO등 이 올수 있으며
User는 별칭으로서 설정파일에 미리 등록되어야함
<insert id="insertUser" parameterType="User">
insert into users (id, username, password)
values (#{id}, #{username}, #{password})
</insert>
# resultType
1) 역시 패키지경로를 포함한 전체 클래스명
2) 별칭( xml설정파일에 typeAlias로 명시해야함 )
<select id="selectUsers" resultType="com.someapp.model.User">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
혹은
<!-- XML설정파일에서 -->
<typeAlias type="com.someapp.model.User" alias="User"/>
<!-- SQL매핑 XML파일에서 -->
<select id="selectUsers" resultType="User">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
# resultMap( 아직까지 이거써야하는 이유 모르겠음. 코드량만 늘어날거같은데)
- resultType에서 만약 컬럼명과 프로퍼티명이 다를경우 as 를 통해 맞춰줄수 있지만
이렇게 resultMap을 통해서도 맞춰줄 수 있다.
<select id="selectUsers" resultMap="userResultMap">
select user_id, user_name, hashed_password
from some_table
where id = #{id}
</select>
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="username"/>
<result property="password" column="password"/>
</resultMap>
<resultMap>태그 속성
id - 이름. 유일한 식별자
type - 패키지를 포함한 자바클래스명이나 타입별칭(혹은 내장된 별칭)
<resultMap>태그 하위태그
<constructor> - 인스턴스화되는 클래스의 생성자에 결과를 삽입하기 위해 사용
idArg, arg
<id> - ID 와같은 결과는 전반적으로 성능을 향상 시킨다.
<result> - 필드나 자바빈 프로퍼티에 삽입되는 일반적인 결과
<collection> - 복잡한 타입의 컬렉션
( 중첩된 결과 매핑 - resultMap 스스로의 연관관계 )