MyBatis?
SQL Mapper Framework for Java
#{property}
<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;
...
}
@Mapper
public interface UserMapper {
void insertUser(@Param("id") int id, @Param("username") string username, @Param("hashedPassword") string hashedPassword)
}
<select id="selectUsers" resultType="User">
select id, username, password
from users
where id = #{id}
</select>
ex) return type이 List<User>인 경우, resultType="list"가 아닌 resultType="User"로 작성해야 된다.
<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은 사용자가 정의한 규칙에 따라 매핑.
switch
문 같이 작동. <discriminator javaType="int" column="vehicle_type">
<case value="1" resultMap="carResult"/>
<case value="2" resultMap="truckResult"/>
<case value="3" resultMap="vanResult"/>
</discriminator>
<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