<sql> 태그
- 다른 구문에서 재사용가능한 SQL구문을 정의할 때 사용
- <sql>태그 id속성 추가 및 id속성 값을 부여 해준 후 태그 내에 사용할 쿼리를 작성하여 사용한다
- <sql> 태그 내에 있는 쿼리들을 재사용하고 싶다면 재사용할 쿼리의 상단에 선언되어야 한다
<sql id="userColumns">
-- 사용할 쿼리
${alias}.id
,${alias}.username
,${alias}.password
</sql>
<select id="selectUsers" resultType="map">
select
-- sql 조각을 다른 구문에서 사용할 때 include를 사용한다
-- name은 sql에서 사용한 변수를 입력할 때 사용한다. sql에서는 paramater를 넘길 수 없으므로 property를 사용한다
<include refid="userColumns">
<property name="alias" value="t1"/>
</include>,
<include refid="userColumns">
<property name="alias" value="t2"/>
</include>
from some_table t1
cross join some_table t2
</select>
<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> -- t1에 where절만 있기에 여기에 위치한다
</select>
다른 Mapper의 <sql> 사용하기
- refid 입력 시 참조할 mapper의 namespace까지 함께 적어준다
common-Mapper.xml
<mapper namespace="mapper.common-Mapper">
<sql id="board_col">
${alias}id,
${alias}subject,
${alias}context
</sql>
</mapper>
board-Mapper.xml
<select id="selectUser">
SELECT
-- refid 입력 시 참조할 mapper의 namespace까지 함께 적어준다
<include refid="mapper.common-Mapper.board_col">
<property name="alias" value="b."/>
</include>
FROM
board b
</select>
레퍼런스
https://kimvampa.tistory.com/176