1 minute read

SQL 조각

  • mapper.xml
  • 쿼리문에서 중복 되는 것들을 공통으로 지정하여 중복되는 쿼리문 정리
  • 재사용성을 높이기 위한 SQL 조각
  • sql 태그 사용
<mapper namespace="memberMapper">
	<!-- 중복 쿼리 sql 조각으로 사용하려는 태그보다 항상 위에 위치 -->
	<sql id="selectMemberSql">
		SELECT NO, 
			   ID, 
			   PASSWORD, 
			   ROLE,
			   NAME, 
			   PHONE, 
			   EMAIL, 
			   ADDRESS, 
			   HOBBY, 
			   STATUS, 
			   ENROLL_DATE, 
			   MODIFY_DATE
		FROM MEMBER
	</sql>
</mapper>

앞에서 회원을 조회하거나 ID로 회원을 검색할 때 모두 사용되었던 쿼리문을 공통으로 지정해주는 작업을 했다.
중복되는 코드를 줄일 수 있다.


기존 쿼리문 수정

  • include 태그 사용
<!-- 회원 조회 시 사용했던 쿼리문 -->
<select id="selectAll" resultMap="memberResultMap">
	SELECT NO, 
		ID, 
		PASSWORD, 
		ROLE,
		NAME, 
		PHONE, 
		EMAIL, 
		ADDRESS, 
		HOBBY, 
		STATUS, 
		ENROLL_DATE, 
		MODIFY_DATE
	FROM MEMBER
	WHERE STATUS = 'Y'
		
	<!-- 최상단에 만들어둔 sql 조각 사용 -->
	<include refid="selectMemberSql" />
	WHERE STATUS = 'Y'
</select>

<!-- id로 회원 검색 시 사용했던 쿼리문 -->
<select id="selectMemberById" parameterType="string" resultMap="memberResultMap">
	SELECT NO, 
		ID, 
		PASSWORD, 
		ROLE,
		NAME, 
		PHONE, 
		EMAIL, 
		ADDRESS, 
		HOBBY, 
		STATUS, 
		ENROLL_DATE, 
		MODIFY_DATE
	FROM MEMBER
	WHERE ID = #{id} AND STATUS  = 'Y'
		
	<include refid="selectMemberSql" />
	WHERE ID = #{id} AND STATUS  = 'Y'
</select>

위 두 개의 select문을 보면 WHERE절을 제외하고 쿼리문이 중복되는 것을 확인할 수 있다.
이 부분을 sql태그를 사용하여 공통으로 빼주고 아래와 같이 수정할 수 있다. (WHERE절을 제외)

-

수정 후

<!-- 회원 조회-->
<select id="selectAll" resultMap="memberResultMap">
	<include refid="selectMemberSql" />
	WHERE STATUS = 'Y'
</select>

<!-- id로 회원 검색 -->
<select id="selectMemberById" parameterType="string" resultMap="memberResultMap">
	<include refid="selectMemberSql" />
	WHERE ID = #{id} AND STATUS  = 'Y'
</select>
  • refid : sql 조각에서 사용했던 id 지정

-

sql태그를 이용하여 만들어둔 sql 조각을 사용하니 코드가 몇 배는 줄어들었다.
검색 조건마다 WHERE절은 다를 것이므로 WHERE절은 쿼리문마다 따로 작성하도록 했다.

수업 때는 신기하긴 했지만 막 이리저리 왔다 갔다, 해둔 것을 계속 수정했기 때문에 너무 복잡해보였다.
정리하면서 보니까 확실히 깔끔하고 코드가 줄어들어 보기 편한 거 같다.


Categories:

Updated: