Kim VamPa

[MyBatis] <sql>, <include> 사용법 본문

공부/데이터베이스

[MyBatis] <sql>, <include> 사용법

Kim VamPa 2021. 3. 5. 01:02
728x90
반응형

목표

 

MyBatis에서 사용하는 <sql>, <include> 사용법

 <sql>, <include>를 왜 사용하고 언제 사용하는지를 알아봅니다.

 

 

 

순서

1. <sql>, <include> 이해

2. 예제

 

 

1. <sql>, <include> 이해

 

1.1 <sql>

 

 <sql> 태그는 다른 구문에서 재사용가능한 SQL구문을 정의할 때 사용합니다. 사용방법은 <sql>태그 id속성 추가 및 id속성 값을 부여 해준 후 태그 내에 사용할 쿼리를 작성하면 끝입니다. 

 

    
    <sql id="id값">

        -- 사용할 쿼리

    </sql>
    

 

 하지만 주의해야 할 <sql> 태그 내에 있는 쿼리들을 재사용하고 싶다면 재사용할 쿼리의 상단에 선언되어야 한다는점입니다. 특정 태그의 쿼리에서 <sql>태그의 쿼리를 불러오는 명령을 하였지만, 상단에 선언되어있지 않고 하단에 선언되어 있다면 불러올수 없습니다.

 

 <sql>태그 내에 파라미터 값을 추가해줘도 상관없습니다. 단 해당 태그를 불러오는 쿼리문에서 <sql> 태그 내에 선언된 파라미터 값을 처리할 수 있는 인자 값이 존재해야만 에러가 나지 않습니다.

 

<sql id="t1">
	title = #{title}
</sql>

 

 

 

1.2 <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>
    
</select>

 

 

 

2. 예제

SQL Map XML 파일에 3개의 쿼리가 작성되어 있다고 가정하겠습니다.( 3개 모두 그냥 아무 의미 없는 테이블을 출력하는 코드입니다. )

 

	<select id="getPage" resultType="int">
	
		select pageNum from vam_board where bno = #{bno}
	
	</select>
    
    	<select id="getTitle" resultType="String">
	
		select title from vam_board where bno = #{bno}
	
	</select>
    
    	<select id="getContent" resultType="String">
	
		select content from vam_board where bno = #{bno}
	
	</select>

 

 3개의 쿼리를 보면 공통적으로 똑같은 where절이 중복되어서 사용되고 있습니다. 이러한 경우에 <sql>과 <include> 태그를 중복된 코드를  줄여줄 수 있습니다.

 

	
    	<sql id="where">
	
		where bno = #{bno}
	
	</sql>
	
	<select id="getPage" resultType="int">
	
		select pageNum from vam_board <include refid="where"></include>
	
	</select>
    
    	<select id="getTitle" resultType="String">
	
		select title from vam_board <include refid="where"></include>
	
	</select>
    
    	<select id="getContent" resultType="String">
	
		select content from vam_board <include refid="where"></include>
	
	</select>
    

 

 

REFERENCE

 

DATE

  • 2020.03.03
728x90
반응형
Comments