본문 바로가기

MyBatis

00. ( parameterType vs parameterMap ) and ( resultType vs resultMap )

일단 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는 별칭으로서 설정파일에 미리 등록되어야함
    아니면 kr.co.common.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 스스로의 연관관계 )



'MyBatis' 카테고리의 다른 글

Mybatis resultMap 1:N 조회 ( one to many )  (0) 2019.04.05
Java - Mybatis연동 ( 프로시저 호출 )  (0) 2019.04.05
Java - Mybatis ( 일반 DML 호출 )  (0) 2019.04.05
Mybatis 동적쿼리  (0) 2019.03.03