[tip] ibatis sql 공유하기
문제상황>
ibatis 에서 동일한 SQL을 반복적으로 사용
사례>
코드성 테이블
ex) SELECT CODE, CDNM FROM CODEST WHERE CODE_GROP_ID = ?
또는 복잡한 쿼리내에 값을 포함하기 위해 SUB Query 사용
solution>
중복되는 sql 을 sql markup에 집중시키고
기존 sql query는 include 문장으로 대체한다.
예> 한파일 내에서 공유
sql-map-config.xml
<sqlMap resource="./sql.xml"/>
sql.xml
<sql id="CODE.SQL">
SELECT
CODE, CDNM
FROM CODEST
WHERE CODE_GROP_ID = #codeabbrnm#
</sql>
<select id="selectCode" resultMap="codeMap">
<include refid="CODE.SQL"/>
</select>
TestClient.java
Map range = new HashMap();
range.put("codeabbrnm", "B001");
List rltList = sqlMapClient.queryForList("selectCode", range);
확장> 별도의 파일로 분리
sql-map-config.xml
<sqlMap resource="./sql.xml"/>
<sqlMap resource="./sqlmap1.xml"/>
sql.xml
<sql id="CODE.SQL">
SELECT
CODE, CDNM
FROM CODEST
WHERE CODE_GROP_ID = #codeabbrnm#
</sql>
<resultMap id="codeMap" class="java.util.HashMap">
<result property="dtlscode" column="CODE" />
<result property="dtlscdnm" column="CDNM" />
</resultMap>
sqlmap1.xml
<select id="selectCode" resultMap="codeMap">
<include refid="CODE.SQL"/>
</select>
TestClient.java
Map range = new HashMap();
range.put("codeabbrnm", "B001");
List rltList = sqlMapClient.queryForList("selectCode", range);
참고>
resultMap 도 별도의 파일로 분리하여 공유할 수 있다.
주의사항>
sql tag는 include를 쓰는 select tag보다 앞에 있어야 한다.
즉 같은 파일 내라면 상위 라인,
별도의 파일이라면 sql-map-config 파일에서 resource 순서상 앞에 지정해야 한다.
ref : http://blog.naver.com/gckcs2/10027711870
http://choikyusun.tistory.com/228
이 글은 스프링노트에서 작성되었습니다.