<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="example">
...
</mapper>
<sql id="tableMyData">MY_DB_NAME</sql>
<sql id="columnsMyData">
EXAMPLE_ID, EXAMPLE_NAME, EXAMPLE_DATE,
EXAMPLE_CODE, SELECT_YN
</sql>
resultMap은 데이터베이스 결과 데이터를 객체에 로드하는 방법을 정의하는 엘리먼트이다. 복잡한 구문에서 관계 서술을 위해 사용될 수 있는 강력한 엘리먼트지만, 여기서는 resultMap을 활용한 구문 매핑 대신 간단한 명칭 매핑만을 알아본다.
column과 property의 이름이 다른 경우, 데이터베이스 별칭을 사용하는 대신 명시적으로 resultMap을 선언하여 사용할 수 있다.
<resultMap id="exampleResult" type="example">
<id property="exampleId" column="EXAMPLE_ID" />
<result property="name" column="EXAMPLE_NAME" />
<result property="date" column="EXAMPLE_DATE" />
<result property="code" column="EXAMPLE_CODE" />
</resultMap>
위와 같이 프로퍼티명과 DB의 칼럼명을 지정해 준다.
<select id="selectName" parameterType="string" resultType="string">
SELECT <include refid="columnsMyData" />
FROM <include refid="tableMyData" />
WHERE EXAMPLE_ID = #{exmapleId}
AND SELECT_YN = TRUE
</select>
<select id="selectASet" parameterType="java.util.HashMap" resultMap="exampleResult">
SELECT * FROM EXAMPLE_NAME
WHERE EXAMPLE_ID = #{exmapleId}
</select>
returnType의 경우에는 다양한 타입이 올 수 있다.
이때 primitive type의 경우에는 _int 와 같이 적어야 int형으로 받을 수 있다.
적지 않을 경우, Wrapper class인 Integer 타입이 반환된다.
<insert id="insertData" parameterType="exampleData">
INSERT INTO <include refid="tableMyData"/>
(<include refid="columnsMyData" />)
VALUES
(#{exampleId}, #{name}, NOW(), #{code}, FALSE)
</insert>
<update id="updateData" parameterType="exampleData">
UNDATE <include refid="tableMyData"/>
SET EXAMPLE_NAME = #{name},
EXAMPLE_DATE = NOW(),
EXAMPLE_CODE = #{code}
WHERE EXAMPLE_ID = #{exampleId}
</update>
<delete id="deleteData" parameterType="exampleData">
DELETE FROM <include refid="tableMyData"/>
WHERE EXAMPLE_ID = #{exampleId}
</delete>
MyBatis 공식 문서(ko)도 확인해 보세요🤷♀️