SSISO Community

시소당

ibatis sqlmap 사용방법

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 클래스를 파라메터로 받아서 쿼리를 해 온다.

출처 : Tong - 반이오타님의 JAVA Framework통

4133 view

4.0 stars