2010. 5. 18. 17:45 IT

 

[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


이 글은 스프링노트에서 작성되었습니다.

posted by smplnote