Database
[MyBatis] 반복되는 쿼리 한번에 쓰기
보리하늘
2018. 12. 17. 17:25
반응형
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
반응형