[ MyBatis3 ] SQL Map XML 파일(select, insert, update, delete, sql)

MyBatis의 가장 큰 장점은 매핑된 구문이다. 동일한 기능의 JDBC코드와 비교하면 아마도 95%이상 코드수가 감소하기도 한다.


# Select

- select 구문은 가장 많이 쓰는 요소이다. MyBatis는 데이터를 조회하고 그 결과를 매핑하는데 집중하고 있다.
  • MyBatis
<select id ="selectPerson" parameterType = "int" resultType = "hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>

  • JDBC
String selectPerson = "SELECT * FROM PERSON WHERE ID = ?";
PreparedStatement ps = comm.prepareStatment(selectPerson);
ps.setInt(1,id);

# insert, update, delete

* insert
<insert id ="insertAuthor" parameterType="domain.blog.Author">
insert into Author (id, username, password, email, bio)
values (#{id}, #{username}, #{password}, #{email}, #{bio})
</insert>
* update
<update id = "updateAuthor" parameterType="domain.blog.Author">
update Author set
username = #{username}
password =#{password}
email = #{email}
bio = #{bio}
where id = #{id}
</update>
* delete
<delete id = "deleteAuthor" parameterType="int">
delete from Author where id = #{id}
</delete>

* insert 자동생성키 설정(Autoincrement)

- 사용하는 데이터베이스가 자동생성키를 지원하는 경우
<insert id ="insertAuthor" parameterType="domain.blog.Author"
useGeneratedKeys = "true" keyProperty ="id">

- 자동생성키를 지원하지 않는 경우 (랜덤 ID 생성 -> 자동생성키와 비슷한 효과를 나타냄)
<insert id ="insertAuthor" parameterType="domain.blog.Author">
<selectKey keyProperty = "id" resultType ="int' order = "BEFORE">
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
</selectKey>

# Sql

- 이 요소는 다른 구문에서 재사용 가능한 SQL구문을 정의할 때 사용

<sql id = "userColumns">id, username, password</sql>

<select id = "selectUsers" parameterType ="int' resultType ="hashmap">
select <include refid = "userColumns"/>
from some_table
where id = #{id}
</select>


※ 출처 : Mybatis-3-User-Guide.pdf