<sql>
다른 구문에서 재사용하기 위한 SQL 조각
사용 조건
- id 속성 값 필수
- 사용하려는 태그의 위치보다 먼저 선언되어야 함
문법
<sql id="userColumns">
${alias}.id,
${alias}.username,
${alias}.password
</sql>
<include>
SQL 조각인 <sql> 문을 DML (Data Manipulation Language) 태그, 즉, 다른 구문에 포함(삽입) 시키는 기술
문법
<select,insert,update,delete>
<include refid="<sql> id">
<property name="<sql> property" value=""/>
</include>
</select,insert,update,delete>
예제
Where 문법 재사용
<sql id="where">
where board_id = #{boardId}
</sql>
<select id="getPage" resultType="int">
select pageNum
from m_board
<include refid="where"></include>
</select>
Table 문법 재사용
<sql id="returnTable">
from ${tableproperty}
</sql>
<select id="getPage" resultType="int">
select pageNum
<include refid="returnTable">
<property name="tableproperty" value="m_board"/>
</include>
</select>
JOIN문 활용
<sql id="userColumns">
${alias}.id,
${alias}.username,
${alias}.password
</sql>
<select id="selectUsers" resultType="map">
select
<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>
SELECT 컬럼 문법 재사용
<sql id="common_select_table">
id, name, age
</sql>
<select id="getMemberInfo">
SELECT
<include refid="common_select_table" />
FROM TABLE
</select>
INSERT 문 활용
<sql id="board_columns">
${alias}id,
${alias}subject,
${alias}context,
${alias}attachments,
${alias}likes,
${alias}views,
${alias}create_time,
${alias}update_time,
${alias}writer
</sql>
<insert id="insertBoard">
INSERT INTO BOARD (
<include refid="board_columns"><property name="alias" value=""/></include>
) VALUES (
#{id},
#{subject},
#{context},
#{attachments},
#{likes},
#{views},
now(),
null,
#{writer} )
</insert>
외부 SQL-Mapper.xml 접근 + <include>
- 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
<include refid="mapper.common-Mapper.board_col">
<property name="alias" value="b."/>
</include>
FROM board b
</select>
사용할 외부 Mapper.xml 에 namespace.<sql>id 로 가져오면 된다.
sql과 include 태그를 사용해본적이 없는데, 앞으로 사용하게 될 문법이라고 생각해서 살펴봤다.
코드의 재사용성을 높이기에 좋은 문법이라고는 하지만, 단순히 살펴봤을 때 가독성이 좋아보이진 않는다..
제대로 사용해봐야 알것같다..
https://java119.tistory.com/102
https://haenny.tistory.com/372 에서 펌 정리 잘되어 있는 사이트 ㅎ
'study > java' 카테고리의 다른 글
[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL (0) | 2023.07.12 |
---|---|
[MyBatis] SpringBoot MyBatis 쿼리 로그 설정하기 (0) | 2023.07.12 |
javascript 페이징 (0) | 2023.07.05 |
sync post 데이터 획득 (0) | 2023.07.05 |
jsp 지시태그 (0) | 2023.07.05 |