[MyBatis] 개발 생산성 향상,중복 쿼리 줄이기 <sql>,<include> 개념 및 문법 총 정리
<sql>
개념
다른 구문에서 재사용하기 위한 SQL 조각
출처 : mybatis 공식 사이트
말 그대롭니다. "재사용성을 높이기 위한 SQL 조각" 아주 정확한 표현입니다.
조건
1.id 속성 값이 필수입니다.
2.사용하려는 태그보다 먼저 선언되어야 합니다.(위에 존재해야 합니다.)
문법
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
<include>
<property>
개념
<sql> 문을 DML(Data Manipulation Language) 태그에 삽입하는 기술
문법
<select,insert,update,delete>
<include refid="<sql> id"><property name="<sql> property" value=""/></include>
</select,insert,update,delete>
<sql> + <include><property> 설명
//no property
<sql id="example01">
FROM
</sql>
//property 한개 작성
<sql id="example02">
FROM ${alias(별칭)}
</sql>
//property 여러 개 작성
<sql id="example03">
FROM ${alias(별칭)} WHERE id = ${alias02(별칭)}
</sql>
<select id="selectUser" resultType="User">
SELECT id,name
<include refid="example03">
<property name="alias" value="tablename"/>
<property name="alias02" value="119"/>
</include>
</select>
실행될 쿼리
SELECT id,name FROM tablename WHERE id = 119
설명
0.<sql> 문에는 parameter를 넘길 수 없으므로 property를 사용한다. ex) ${alias},${tablename}..
1. <sql> id 속성 == <include> refid 속성
2. <sql> ${alias(별칭)} == <property> name 속성
3. <property> value 속성 : ${alias}에 들어갈 값
이 네가지만 기억하시면 됩니다.
<sql> + <include> 실전 예제
☞ 참고 : <sql> property는 꼭 $로 작성하셔야 합니다.
☞ 참고 02 : <sql> 문에선 property 를 <if> , <bind> 태그에 변수로 인식하지 못합니다.
1.Table 문법 재사용
<sql id="returnTable">
from ${tableproperty}
</sql>
<include refid="returnTable">
<property name="tableproperty" value="tablename"/>
</include>
2.JOIN문 활용 (MyBatis 공식 사이트 예제)
<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>
3.SELECT 칼럼 문법 재사용
<sql id="common_select_table">id, name, age</sql>
<select id="getMemberInfo">
SELECT
<include refid="common_select_table" />
FROM
TABLE
</select>
4.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> 사용하기
board-Mapper.xml 에서 common-Mapper.xml <sql> 사용(접근) 하기
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로 가져오면 됩니다.
'Spring > MyBatis' 카테고리의 다른 글
[MyBatis] 동적 쿼리 <trim> 개념 및 문법 총 정리 (0) | 2020.04.30 |
---|---|
[MyBatis] 동적 쿼리 <bind> 문법 총 정리 (0) | 2020.04.26 |
[MyBatis] 동적 쿼리 <where> 문법 총 정리 (3) | 2020.04.05 |
[MyBatis] 동적 쿼리 foreach문 문법 총 정리 (6) | 2020.03.28 |
[MyBatis] CDATA 사용하기(feat.<> 괄호,특수문자 문자열로 인식하기) (0) | 2019.12.10 |