MyBatis sql include if bind 태그

반응형

<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로 가져오면 됩니다.

반응형

+ Recent posts