Develop

[DB] <sql> <include> 태그 사용하기 본문

DB

[DB] <sql> <include> 태그 사용하기

개발 기록 2024. 3. 15. 09:34

 

< sql> 태그

: 다른 구문에서 재사용하기 위한 SQL 조각

 

사용 조건

- id 속성 값 필수

- 사용하려는 태그의 위치보다 먼저 선언하기

 

문법

<sql id="user">
    and USER_NAME = #{userName}
</sql>

 


 

<include> 태그

: <sql> 문을 다른 구문에 포함(삽입) 시킨다 

 

문법

<include refid="userName"/>

 

 


 

사용 예

 

<!--
    게시글을 조회한다
-->
<select id="userNameSearch" parameterType="usVo" resultType="usVo">
    SELECT /* userNameSearch */
        A.USER_NAME
        , A.USER_ID
        , A.USER_EMAIL
    FROM
        USER A
    WHERE
        1=1
        <include refid="user"/>
</select>

 

 

==

 

<!--
    게시글을 조회한다
-->
<select id="userNameSearch" parameterType="usVo" resultType="usVo">
    SELECT /* userNameSearch */
        A.USER_NAME
        , A.USER_ID
        , A.USER_EMAIL
    FROM
        USER A
    WHERE
        1=1
        and USER_NAME = #{userName}
</select>

 

 

즉 필요한 곳에 sql을 삽입하여 코드의 재사용성을 높일 수 있고 중복코드가 줄어든다.

 

where절 말고도 사용할 수 있으니 유용하게 쓰인다.

그러나 sql을 보고 바로 알아볼 수 없어 가독성에는 좋지않다.

 

또한 include를 할 때 앞에 조건이 있을 수도 있고 없을 수도 있지만

그에 따라 and를 썼다 지웠다 하지않기 위해서

where 1=1 을 기본으로 하고 (항상 참임)

뒤에 넣어주는 방식으로 한다.

 


참고한 글

 

(where, insert, select, table, join, 외부 sql-mapper.xml 접근이 궁금하다면 아래 글 참고)

[MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기 (tistory.com)

 

[MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기

다른 구문에서 재사용하기 위한 SQL 조각 사용 조건 id 속성 값 필수 사용하려는 태그의 위치보다 먼저 선언되어야 함 문법 ${alias}.id, ${alias}.username, ${alias}.password SQL 조각인 문을 DML (Data Manipulation

haenny.tistory.com