본문 바로가기
Database

[MyBatis] 반복되는 쿼리 한번에 쓰기

by 보리하늘 2018. 12. 17.
728x90
반응형

select / update / delete 를 수행 할 때 같은 테이블 또는 같은 컬럼을 다루는 sql 쿼리문에서는

비슷한 where 절 조건문을 사용할 때가 많다.


같은 내용의 소스를 여러번 반복해서 사용하게 되면 소스파일이 길어지고, 복잡해보이고, 지저분해 보일수도...



이 때!


함수를 호출하는 것 처럼 반복되는 쿼리문을 미리 선언하여 가져다 쓰기로 하자.



<mapper> 안에 <sql> 을 선언하고 반복적으로 사용 할 쿼리문을 넣는다.


선언한 sql 을 사용 할 때엔 


<include refid="SEARCH" /> 만 적어 놓으면 끝~~~~~~~~!


조건문 외에 select * from 과 같이 일반적으로 사용하는 쿼리문도 사용 할 수 있다. 




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
31
32
33
34
35
36
37
<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="partner.mapper.CallCenterMapper">
    <sql id="SEARCH">
        AND D.CODE3 = A.SERVER_ID
        AND D.CODE_TYPE = 'A0'
        AND A.SEQNO IS NOT NULL
        AND A.MEMBER_ID IS NOT NULL
        AND A.MEMBER_ID_SEQ IS NOT NULL
    </sql>
    
 
    <select id="selectCallCenterList" resultType="CallCenterInfo">
 
        SELECT
            A.MEMBER_ID                                 AS memberId,
            A.MEMBER_ID_SEQ                             AS memberIdSeq,
            A.TO_NAME                                     AS toName,
            A.TO_EMAIL                                     AS toEmail,
            TO_CHAR(A.SEND_TIME,'YYYY-MM-DD HH24:MI')     AS sendTime,
            CASE
                WHEN A.OPEN_TIME IS NULL
                THEN '확인 전 입니다'
                ELSE TO_CHAR(A.OPEN_TIME,'YYYY-MM-DD HH24:MI')
            END AS tdate,
            D.CODE2                                     AS ip,
            D.CODE4                                     AS port,
            A.SERVER_ID                                 AS sendedServer
         FROM    TMS_CODE_INFO D, PM_${param.LIST_TABLE}_HIST A
         WHERE 1=1
 
             <include refid="SEARCH" />
             AND A.WORKDAY BETWEEN #{param.startDate} AND #{param.endDate}            
    
    </select>
</mapper>
cs


728x90
반응형

댓글