mybatis - 재사용성을 높이기 위한 SQL 조각
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절은 쿼리문마다 따로 작성하도록 했다.
수업 때는 신기하긴 했지만 막 이리저리 왔다 갔다, 해둔 것을 계속 수정했기 때문에 너무 복잡해보였다.
정리하면서 보니까 확실히 깔끔하고 코드가 줄어들어 보기 편한 거 같다.