Database/MyBatis

Myabtis - <sql>, <include> 태그

임빈영 2022. 4. 28. 16:28

<sql>, <include> 태그

<sql> 태그

<sql> 태그는 다른 구문에서 재사용 가능한 sql 구문을 정의할 때 사용한다. 

 

<sql id="id값">
    재사용할 sql 구문
</sql>

사용 방법은 위와 같다. <sql> 태그의 id 속성에 값을 부여한 후 태그 내에 사용할 쿼리를 작성하면 된다.

 

<sql> 태그 내에 있는 sql 구문을 재사용하기 위해서는 재사용할 쿼리의 상단에 선언되어야 한다. 특정 쿼리문에서 <sql> 태그를 불러왔지만, 상단에 선언되어 있지 않았다면 해당 <sql> 태그를 불러올 수 없을 것이다.

 

<sql id="">
    title = #{title}
</sql>

위 코드와 같이 <sql> 태그 내에 파라미터 값을 추가해도 무방하다. 단, 해당 태그를 불러오는 쿼리문에서 <sql> 태그 내에 선언된 파라미터 값을 처리할 수 있는 인자 값이 존재해야 한다.

 

<include> 태그

같은 파일 내에 정의한 <sql> 태그를 불러오기 위해 사용되는 태그이다.

 

<sql id="t1">
    where boardNo = #{boardNo}
</sql>

<select id="getTitle" resultType="String">
    select title from tbl_board
    <include refid="t1"/>
</select>

사용 방법은 위와 같다. <include> 태그를 선언하고, 해당 태그에 refid 속성을 추가한 후 속성 값으로 불러오고자 하는 <sql> 태그의 id 속성 값을 작성해주면 된다.

 

<sql>, <include> 태그의 사용
-- 게시물의 제목을 반환하는 쿼리문
<select id="getTitle" resultType="String">
    select title from tbl_board
    where boardNo = #{boardNo}
</select>

-- 게시물의 내용을 반환하는 쿼리문
<select id="getContent" resultType="String">
    select content from tbl_board
    where boardNo = #{boardNo}
</select>

-- 게시물의 작성자를 반환하는 쿼리문
<select id="getWriter" resultType="String">
    select writer from tbl_board
    where boardNo = #{boardNo}
</select>

SQL Map XML 파일에 위와 같이 3개의 쿼리가 작성되어 있다고 가정해 보겠다. 위 쿼리문을 보면 공통적으로 똑같은 where 절이 중복돼서 사용되는 것을 확인할 수 있다.

 

<sql id="where">
    where boardNo = #{boardNo}
</sql>

<select id="getTitle" resultType="String">
    select title from tbl_board
    <include refid="where"/>
</select>

<select id="getContent" resultType="String">
    select content from tbl_board
    <include refid="where"/>
</select>

<select id="getWriter" resultType="String">
    select writer from tbl_board
    <include refid="where"/>
</select>

이러한 상황에서 위와 같이 <sql>, <include> 태그를 사용하여 중복된 코드를 줄여줄 수 있다.


출처

https://kimvampa.tistory.com/176

 

728x90