아키텍처와 함께

블로그 이미지
by gregorio
  • Total hit
  • Today hit
  • Yesterday hit

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되어 실행된다.


AND

ARTICLE CATEGORY

분류 전체보기 (56)
Spring Framrwork (33)
Linux (1)
APM (1)
Java (8)
python (0)
ant (1)
chart (1)
OS (1)
tomcat (1)
apache (1)
database (0)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

ARCHIVE

LINK