본문 바로가기

study/java

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

 <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 태그를 사용해본적이 없는데, 앞으로 사용하게 될 문법이라고 생각해서 살펴봤다.

코드의 재사용성을 높이기에 좋은 문법이라고는 하지만, 단순히 살펴봤을 때 가독성이 좋아보이진 않는다..

제대로 사용해봐야 알것같다..

 


MyBatis

 

MyBatis – 마이바티스 3 | 매퍼 XML 파일

Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면...

mybatis.org

https://java119.tistory.com/102

 

[MyBatis] 개발 생산성 향상,중복 쿼리 줄이기 <sql>,<include> 개념 및 문법 총 정리

개념 다른 구문에서 재사용하기 위한 SQL 조각 출처 : mybatis 공식 사이트 말 그대롭니다. "재사용성을 높이기 위한 SQL 조각" 아주 정확한 표현입니다. 조건 1.id 속성 값이 필수입니다....

java119.tistory.com

 

 

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