티스토리 뷰
업무개선안을 하면서 iBatis 라는 SqlMapper 프레임워크를 사용하는데, 이 녀석이 생각보다 다루기가 까다롭더군요. (아마도 제가 다룬지 얼마 안돼서 그렇겠지만...) 어제는 하루 종일 아래와 같은 형태의 쿼리를 어떻게 하면 구성할 수 있을까? 라는 고민을 계속하면서 삽질의 삽질을 계속했습니다.
SQL.xml
Java.java
iterate 를 이용하면 된다는 것은 이미 manual 을 통해서 봤지만, 이게 다중 파라메터 Query 를 구성할 경우에는 자바 소스에서 어떤식으로 파라메터를 넘겨야하는지를 모르겠더군요.
SELECT
*
FROM
ADM.DBCFG
WHERE
DBNAME = ?
AND INPUT_DATE IN ( ? , ?, ?, ? )
아주 단순한 쿼리이지만... -_-; 예제의 어떤 곳에도 파라메터 2개를 넘기는 방식으로 짜놓은게 없었기 때문에 막상 처리하려니 어떻게 넘겨야하나 라는 고민을 했습니다.
결론은 정말 간단하더군요. -_-;;
SQL.xml
<select id="dbm.selectDBCfgByDBNameAndInputDate" parameterClass="java.util.HashMap" resultMap="retmapDBCfgVo">
SELECT
*
FROM
ADM.DBCFG
WHERE
DBNAME = #dbname#
<iterate property="input_date" prepend ="AND INPUT_DATE IN " open="(" close=")" conjunction="," >
#input_date[]#
</iterate>
</select>
Java.java
public List<DBCfgVo> getDBCfgList(String dbname, List<String> date) {
SqlMapClient sqlMapper = SqlMapperMgr.getSqlMapClient(MAPPERTYPE.DBMDB);
List<DBCfgVo> list = null;
Map<String, Object> map = new HashMap<String, Object>();
map.put("dbname", dbname);
map.put("input_date", date);
try {
list = (List<DBCfgVo>)sqlMapper.queryForList("dbm.selectDBCfgByDBNameAndInputDate",map);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
이야기의 핵심은 결국 Object 타입으로 HashMap 을 구성해서 던지면 iBatis 가 자동으로 이걸 판단해서 넣는다는 것입니다. 단, 여기에는 전제조건이 반드시 List 타입 변수는 property 라는 xml 어트리뷰트로 명시해야하죠. (저걸 안하니까 에러가... -_-;;)
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 시간표
- 후기
- 모임
- 와우
- hp-ux
- 프로그래밍
- 박영창
- 일기
- wow
- 삼성 소프트웨어 멤버십
- 레포트
- 캐논
- 영화
- SSM
- 리눅스
- Japanimation
- oracle
- SQL 튜닝
- HPUX
- World Of Warcraft
- 오픈 소스 SW와 전략적 활용
- 실전! 업무에 바로 쓰는 SQL 튜닝
- 과제물
- 오라클
- 회식
- 실습으로 배우는 Unix System Admin (HPUX)
- 네트워크
- 애니메이션
- 책
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함