Result Map とは何か。
簡単に言うと、データベースの列と Java オブジェクトとの対応付けを行うもの。
SQL Map ファイル内に書きます。
<resultMap id="resultMapName" class="some.domain.Class" [extends="parent-resultMap"]>
    <result property="propertyName" column="COLUMN_NAME"
        [columnIndex="1"] [javaType="int"] [jdbcType="NUMERIC"]
        [nullValue="-999999"] [select="someOtherStatement"]
    />
    <result ……/>
    <result ……/>
    <result ……/>
</resultMap>
Result Map の書き方は上のような感じです。[ ] で囲まれているのはオプション。
で、中身の方に。
Result Map の構造をおおざっぱに言うと全体が resultMap タグで囲まれていて、その中に結果の列(結果オブジェクトのプロパティ)数分 result タグが並ぶという感じになります。
タグの詳細については次の通り。
いつもの様にサンプルへ。
今回のサンプルはなんのひねりもなくただ使ってみました的なもの。
データベースは相変わらず HSQLDB。
テーブルの構造はこれ。
CREATE TABLE SAMPLE(
    ID  NUMERIC(8) NOT NULL,
    DESC VARCHAR(200)
)
次に、sqlMapConfig.xml。
<?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>
<transactionManager type="JDBC" >
    <dataSource type="SIMPLE">
        <property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
        <property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost"/>
        <property name="JDBC.Username" value="sa"/>
        <property name="JDBC.Password" value=""/>
    </dataSource>
</transactionManager>
<sqlMap resource="maps/Sample.xml" />
</sqlMapConfig>
今回のメインである SQL Map ファイル。Sample.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="Sample">
    <resultMap id="resultMap-1" class="javademo.ibatis.Sample">
        <result property="id" column="ID" columnIndex="1" javaType="long"
            jdbcType="NUMERIC"/>
        <result property="description" column="DESC" nullValue="NO DESCRIPTION"/>
    </resultMap>
    <select id="getSample2" parameterClass="long" resultMap="resultMap-1">
        SELECT * FROM SAMPLE WHERE ID = #value#
    </select>
</sqlMap>
結果を格納するクラス。
package javademo.ibatis;
public class Sample{
    private Long id;
    private String description;
    
    public Long getId(){
        return this.id;
    }
    
    public void setId(Long id){
        this.id = id;
    }
    
    public String getDescription(){
        return this.description;
    }
    
    public void setDescription(String desc){
        this.description = desc;
    }
}
最後は実行するところ。
package javademo.ibatis;
import java.io.Reader;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
public class Run {
    public static void main(String[] args) {
        try{
           // 準備作業
            Reader reader = Resources.getResourceAsReader("maps/sqlMapConfig.xml");
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            // いざ実行
            Sample sample = (Sample) sqlMap.queryForObject("getSample2", new Long(1L));
            System.out.println("id=" + sample.getId());
            System.out.println("description=" + sample.getDescription());
           
        }catch(Exception e){
            e.printStackTrace();
            System.exit(1);
        }       
    }
}
Result Map についてのまとめ。