➖. <sql></sql>
: 반복적으로 쓰이는 sql문의 재사용성을 높여준다.
<sql id="sql_where">WHERE 1=1</sql>처럼 반복 사용하는 SQL을 동적으로 활용할 때 쓰일 수 있다.
아래 예시에서는 <sql> 태그 안에 ORACL WITH절을 사용하였다.
<sql id="sql_dept">
WITH DEPT(
SELECT
DEPT_CODE,
DEPT_NAME,
DEPT_LEVEL
FROM DEPARTMENT
)
</sql>
➖. <include></include>
: <select>,<update> 등에 <sql> 구문을 넣을 때 사용한다.
<include>의 refid 값은 <spl> 태그의 id값과 같게 해야 include할 수 있다.
<select id="selectUserByDepartment" parameterType="java.lang.String" resultType="UserInformaiton">
<include refid="sql_dept"></include>
SELECT
UI.USER_ID,
UI.USER_NAME,
UI.USER_DEPARTMENT,
DEPT.DEPT_NAME,
DEPT.DEPT_LEVLEL
FROM USER_INFORMATION UI
INNER JOIN DEPT ON UI.USER_DEPARTMENT = DEPT.DEPT_CODE
WHERE UI.USER_DEPARTMENT = #{value}
</select>
➖. <property></property>
: <sql> 구문 내 변수를 전달할 때 사용한다.
<property>의 name은 <sql> 내에서 사용할 이름이며, value는 <sql>에 전달할 값이다.
주의할 점은 <property>로 값을 전달하기 때문에, <sql> 내에서 #{name}이 아닌 ${name}으로 전달해야 한다.
<sql id="sql_dept">
WITH DEPT(
SELECT
DEPT_CODE,
DEPT_NAME,
DEPT_LEVEL
FROM DEPARTMENT
WHERE DEPT_CODE = ${deptCode}
)
<sql>
<select id="selecMarketingtUser" resultType="UserInformaiton">
<include refid="sql_dept">
<property name="deptCode" value="MARKETING"/>
</include>
SELECT
UI.USER_ID,
UI.USER_NAME,
UI.USER_DEPARTMENT,
DEPT.DEPT_NAME,
DEPT.DEPT_LEVLEL
FROM USER_INFORMATION UI
INNER JOIN DEPT ON UI.USER_DEPARTMENT = DEPT.DEPT_CODE
</select>
만약, parameter 값을 <include> 내 <property>를 통해서 <sql>에 넘기고 싶다면
아래 예시와 같이 <property>에서 value="#{name}"으로 넘길 수 있다.
<sql id="sql_dept">
WITH DEPT(
SELECT
DEPT_CODE,
DEPT_NAME,
DEPT_LEVEL
FROM DEPARTMENT
WHERE DEPT_CODE = ${deptCode}
)
<sql>
<select id="selectUserByDepartment" parameterType="java.lang.String" resultType="UserInformaiton">
<include refid="sql_dept">
<property name="deptCode" value="#{value}"/>
</include>
SELECT
UI.USER_ID,
UI.USER_NAME,
UI.USER_DEPARTMENT,
DEPT.DEPT_NAME,
DEPT.DEPT_LEVLEL
FROM USER_INFORMATION UI
INNER JOIN DEPT ON UI.USER_DEPARTMENT = DEPT.DEPT_CODE
</select>