hibernate 를 쓰려니 너무 어려워서 팀원들한테 쓰자고 하기 뭐하고..
dbutils 를 쓰려니 쉽고 좋긴 한데 뭔가 아쉬운게 있다면
그 대안 중 하나로 써 볼만하다고 생각되는 sqlmap 이라는 것이 있다..
sqlmap 에 대한 간단한 사용법에 대해 살펴보자.
여기서는 SqlMapClient 클래스를 사용하는 것에 대해서만 알아볼까 한다.
SqlMapClient sqlMap = SqlMapUtil.getInstance();
...
List list = sqlMap.queryForList ("selectUserInfo", "jzero2" );
for (int i=0; i<list.size(); i++) {
UserInfo info = (UserInfo)list.get(i);
......
}
쿼리의 결과를 bean 의 리스트로 가져왔다 dbUtils 에서도 볼 수 있었던 부분이므로
이해하기 수월할 것이다.
queryForMap, queryForObject 도 지원하며
특히, queryForPaginatedList 란 메서드로 원하는 갯수만큼의 결과도 얻어올 수 있다.
사용하는 것은 역시나 간단하다.
UserInfo 클래스는
public class UserInfo {
private String seqNo = null;
private String userId = null;
private String userName = null;
...
public void setSeqNo (String aValue) {
seqNo = aValue;
}
public String getSeqNo () {
return seqNo;
}
... ...
}
SqlMapUtil 의 getInstance 는 다음처럼 구현했다.
private static final SqlMapClient sqlMap;
SqlMapClientprivate static final SqlMapClient sqlMap;
static {
try {
String resource = "ibatis/sqlmap/sqlMap-config.xml";
Reader reader = Resources.getResourceAsReader (resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
......
}
}
간단한 테스트 이므로 소스는 이게 끝이다.
그럼 sqlMap-config.xml 는 어떻게 되어져 있을까..
여기에는 datasource 가 설정되어 있고 클래스와 테이블 매핑정보 파일들을 볼 수 있을 것이다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="ibatis/sqlmap/sqlMap-config.properties" />
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<typeAlias alias="order" type="testdomain.Order"/>
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="ibatis/sqlmap/maps/UserInfo.xml" />
</sqlMapConfig>
이제 매핑xml 파일들을 어떻게 설정해야 하는지 살펴보자.
UserInfo.xml 의 내용이다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="UserInfo">
<typeAlias alias="procInfo" type="ibatis.UserInfo"/>
<resultMap id="userInfoResult" class="procInfo">
<result property="seq" column="SEQ_NO"/>
<result property="userId" column="USER_ID"/>
<result property="userName" column="USER_NAME"/>
</resultMap>
<select id="selectUserInfo" resultMap="userInfoResult">
SELECT
SEQ_NO,
USER_ID,
USER_NAME,
FROM
UserInfo
WHERE
USER_ID = #value#
</select>
<select id="selectUserInfoMap" parameterClass="map" resultClass="ibatis.UserInfo">
SELECT
SEQ_NO as seqno ,
USER_ID as doc_no,
USER_NAME as user_div,
FROM
UserInfo
WHERE
USER_ID = #user_id# and USER_NAME = #user_name#
</select>
<select id="getUserInfoObj" parameterClass="ibatis.UserInfo" resultMap="userInfoResult">
SELECT
SEQ_NO,
USER_ID,
USER_NAME,
FROM
UserInfo
WHERE
SER_ID = #user_id# and USER_NAME = #user_name#
</select>
</sqlMap>
일부러 UserInfo 클래스와 UserInfo 테이블의 컬럼명을 다르게 하였다..
selectUserInfo 는 userInfoResult 설정한데로 매핑을 하게 되며
그렇게 하지 않고 selectUserInfoMap 처럼 alias 를 주어서 사용하여도 된다.
UserInfo클래스의 필드명이 테이블의 컬럼명이랑 같다면 alias 가 없어도 자동으로 매핑될 것이다.
selectUserInfoMap 은 파라메터가 여럿일 경우 Map을 파라메터로 받는 것이며
HashMap map = new HashMap();
map.put("user_id", "jzero2");
map.put("user_name", "xxxxxxx");
키 값을 이용한다
getUserInfoObj 는 UserInfo 클래스를 파라메터로 받아서 쿼리를 해 온다.
SSISO Community