Mybatis에서 Paging 처리 등 공통적으로 사용되는 SQL을 작성한 후 SQL File에서 Include하여 사용하면 개발의 생산성을 향상할 수 있다.
시스템에서 공통적으로 사용하는 SQL을 /resources/sqlmap 폴더에 common 폴더를 생성한 후 commonSQL.xml 파일을 생성한다.
■ commonSQL.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="common.sql"> <sql id="pageHeader"> SELECT * FROM ( SELECT ROWNUM AS RN ,INNER_SQL.* FROM ( </sql>
<sql id="pageFooter"> <![CDATA[ ) INNER_SQL WHERE ROWNUM <= ( #{curPage} * #{pageSize} ) ) WHERE RN > ( ( #{curPage} -1 ) * #{pageSize} ) ]]> </sql> <sql id="batchpageOffset"> <![CDATA[ OFFSET ( #{_page} * #{_pagesize} ) ROWS FETCH NEXT #{_pagesize} ROWS ONLY ]]> </sql> <!-- Paging Oracle 12C 이상 --> <sql id="onlinepageOffset"> <![CDATA[ OFFSET ( ( #{curPage} -1 ) * #{pageSize} ) ROWS FETCH NEXT #{pageSize} ROWS ONLY ]]> </sql> </mapper> |
SQL 파일 작성이 완료되면 실제 업무 SQL에서 include를 이용하여 해당 sql을 사용할 수 있다.
■ 적용 예
<select id="selAPUserListPopup" parameterType="java.util.HashMap" resultType="egovMap"> SELECT /* selAPUserListPopup */ A.USER_ID ,A.ORG_CD FROM AP_USER A WHERE 1 = 1 <if test = 'userId != null and userId != ""'> AND A.USER_ID = #{userId, jdbcType=VARCHAR} </if> ORDER BY UP_DT DESC <include refid="common.sql.pageOffset"/> </select> |
해당 SQL에 include refid(Reference Id)를 commonSQL의 namespace이름과 sql id를 사용하여 Include하면 SQL 실행 시 해당 파일이 Include되어 실행된다.
'Spring Framrwork' 카테고리의 다른 글
Mybatis ResultHandler를 이용한 ExcelDownload (3) | 2018.04.19 |
---|---|
Spring framework Property Reload (0) | 2018.04.13 |
Spring Framework File Upload with Drag and Drop (0) | 2018.03.16 |
Spring framework XML Marshaller( Jaxb2Marshaller ) (0) | 2018.03.09 |
spring framework interceptor (0) | 2018.03.02 |