[MyBatis] parameterType, resultType, resultMap

gga·2023년 4월 18일
0

Java

목록 보기
1/1

MyBatis?
SQL Mapper Framework for Java

Mapper XML

parameterType

  • 표기: #{property}
  • 구문에 전달될 파라미터의 패키지 경로를 포함한 클래스명 혹은 alias 작성
<insert id="insertUser" parameterType="User">
  insert into users (id, username, password)
  values (#{id}, #{username}, #{password})
</insert>
<typeAlias type="com.someapp.model.User" alias="User"/>
public class User {
  private int id;
  private String username;
  private String hashedPassword;
  ...
}
  • 생략가능(Optional): MyBatis가 TypeHandler를 계산할 수 있음
@Mapper
public interface UserMapper {
  void insertUser(@Param("id") int id, @Param("username") string username, @Param("hashedPassword") string hashedPassword)
}

resultType

  • 구문에 의해 리턴되는 타입의 패키지 경로를 포함한 전체 클래스명이나 alias
<select id="selectUsers" resultType="User">
  select id, username, password
  from users
  where id = #{id}
</select>
  • collections의 경우, collection에 포함된 type 작성
    ex) return type이 List<User>인 경우, resultType="list"가 아닌 resultType="User"로 작성해야 된다.

resultMap

  • ResultSet에서 데이터를 가져올때 작성되는 JDBC코드를 대부분 줄여주는 역할을 담당
  • relationship을 서술하거나 single 데이터베이스를 사용하지 않는 경우에 사용
<select id="selectUsers" resultMap="userResultMap">
  select id, username, password
  from users
  where id = #{id}
</select>

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap>

resultType과 resultMap 차이점
resultType에 작성된 POJO 클래스에 자동으로 매핑. 변수명과 컬럼명이 일치.
resultMap은 사용자가 정의한 규칙에 따라 매핑.

association

collection

discriminator

  • 다양한 데이터 타입을 반환하는 경우. switch문 같이 작동.
  <discriminator javaType="int" column="vehicle_type">
    <case value="1" resultMap="carResult"/>
    <case value="2" resultMap="truckResult"/>
    <case value="3" resultMap="vanResult"/>
  </discriminator>

sql

  • 다른 구문에서 재사용가능한 SQL구문을 정의할 때 사용
<sql id="sometable">
  ${prefix}Table
</sql>

<sql id="someinclude">
  from
    <include refid="${include_target}"/>
</sql>

<select id="select" resultType="map">
  select
    field1, field2, field3
  <include refid="someinclude">
    <property name="prefix" value="Some"/>
    <property name="include_target" value="sometable"/>
  </include>
</select>

참조

공식문서: https://mybatis.org/mybatis-3
why MyBatis?: https://hub.packtpub.com/why-mybatis

0개의 댓글

Powered by GraphCDN, the GraphQL CDN