안녕하세요!
오늘은 mybatis의 mapper, xml 파일에 사용하는 sql, include에 대해 알아보는 시간을 가져보겠습니다.
<sql>, <include>
<sql>, <include>는 백엔드의 xml에서 사용되는 기능으로 재사용하는 코드가 많은 SQL를 블록으로 정의하여 원하는 곳에서 이 코드들을 불러와 중복을 줄일 수 있는 코드입니다.
<sql>
sql은 반복되는 코드를 정의하는 태그로 호출할 수 있는 id 값을 정하고 태그 안쪽에 반복 코드를 넣어서 정의합니다.
<sql id ="hyehwi">
WHERE category = #{category}
</sql>
이런 방법으로 호출 받을 수 있게 id 값을 hyehwi로 정하고 나중에 필요한 구문에서 태그로 불러와서 사용했습니다.
<include>
이 태그는 다른 xml 파일이나 sql 매핑 파일에서 정의된 sql 태그를 호출하는 태그입니다.
/* 구문을 사용한 경우 */
<SELECT id="selectHyehwi" resultType="UserVO">
SELECT *
FROM TBL_USER
<include refid="hyehwi"/>
</SELECT>
코드는 SELECT 문은 TBL_USER 테이블에서 입력한 카테고리와 일치하는 튜플들을 구하는 SQL입니다.
/* 구문을 사용하지 않은 경우 */
<SELECT id="selectHyehwi" resultType="UserVO">
SELECT *
FROM TBL_USER
WHERE category = #{category}
</SELECT>
지금은 한 줄로만 정의해서 효율이 떨어지지만 조건이 많거나 <IF> 구문을 사용해서 동적으로 분기점을 주는 SQL를 사용한다면 정말 좋은 방법인 것 같습니다.
예시
<sql id="check">
<if test="searchCheck != null && searchCheck != ''">
AND USER_ID = #{searchCheck}
OR USER_NAME = #{searchCheck}
</if>
<if test="searchCheck != null && searchCheck != '' && searchCategory == 1">
AND USER_ID = #{searchCheck}
</if>
<if test="searchCheck != null && searchCheck != '' && searchCategory == 2">
AND USER_NAME = #{searchCheck}
</if>
</sql>
<SELECT id="user" resultType="userVO">
SELECT *
FROM TBL_USER
<where>
<include refid="check">
AND USER_USE = 'Y'
</where>
</SELECT>
이렇게 sql 구문에 반복되는 코드들을 정의하고 include 태그를 사용하여 한 줄로 표현해서 사용할 수 있습니다.
그리고 id만 다르게 하여 구문을 여러 개 정의하고 필요한 태그만 불러와서 사용하는 방식으로 사용합니다!
여기까지 mybatis에서 사용하는 <sql>, <include>를 사용하는 방법에 대해 알아봤습니다.
https://mybatis.org/mybatis-3/ko/sqlmap-xml.html
자세한 사항은 이곳에서 확인해 보실 수 있습니다.
다음에도 좋은 정보로 찾아뵙겠습니다!