[MyBatis] <sql>, <include> 사용법
목표
MyBatis에서 사용하는 <sql>, <include> 사용법
<sql>, <include>를 왜 사용하고 언제 사용하는지를 알아봅니다.
순서
1. <sql>, <include> 이해
2. 예제
1. <sql>, <include> 이해
1.1 <sql>
<sql> 태그는 다른 구문에서 재사용가능한 SQL구문을 정의할 때 사용합니다. 사용방법은 <sql>태그 id속성 추가 및 id속성 값을 부여 해준 후 태그 내에 사용할 쿼리를 작성하면 끝입니다.
<sql id="id값">
-- 사용할 쿼리
</sql>
하지만 주의해야 할 <sql> 태그 내에 있는 쿼리들을 재사용하고 싶다면 재사용할 쿼리의 상단에 선언되어야 한다는점입니다. 특정 태그의 쿼리에서 <sql>태그의 쿼리를 불러오는 명령을 하였지만, 상단에 선언되어있지 않고 하단에 선언되어 있다면 불러올수 없습니다.
<sql>태그 내에 파라미터 값을 추가해줘도 상관없습니다. 단 해당 태그를 불러오는 쿼리문에서 <sql> 태그 내에 선언된 파라미터 값을 처리할 수 있는 인자 값이 존재해야만 에러가 나지 않습니다.
<sql id="t1">
title = #{title}
</sql>
1.2 <include>
같은 파일 내에 정의해둔 <sql> 태그 내의 쿼리들을 불러올 수 있게 해 줍니다. 사용법은 <include> 태그를 선언하고 해당 태그에 refid속성을 추가 해준 뒤 속성 값으로 불러오고자 하는 <sql> 태그의 id속성 값을 삽입해주면 끝입니다.
<sql id="t1">
where bno = #{bno}
</sql>
<select id="getTitle" resultType="String">
select title from tbl_board
<include refid="t1"></include>
</select>
2. 예제
SQL Map XML 파일에 3개의 쿼리가 작성되어 있다고 가정하겠습니다.( 3개 모두 그냥 아무 의미 없는 테이블을 출력하는 코드입니다. )
<select id="getPage" resultType="int">
select pageNum from vam_board where bno = #{bno}
</select>
<select id="getTitle" resultType="String">
select title from vam_board where bno = #{bno}
</select>
<select id="getContent" resultType="String">
select content from vam_board where bno = #{bno}
</select>
3개의 쿼리를 보면 공통적으로 똑같은 where절이 중복되어서 사용되고 있습니다. 이러한 경우에 <sql>과 <include> 태그를 중복된 코드를 줄여줄 수 있습니다.
<sql id="where">
where bno = #{bno}
</sql>
<select id="getPage" resultType="int">
select pageNum from vam_board <include refid="where"></include>
</select>
<select id="getTitle" resultType="String">
select title from vam_board <include refid="where"></include>
</select>
<select id="getContent" resultType="String">
select content from vam_board <include refid="where"></include>
</select>
REFERENCE
DATE
- 2020.03.03