いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

iBatis奮闘記-0018 (基本的なDAOの作成-1)

今回、基本的なDAOの作成方法を記述したいと思います。

iBatis DAOフレームワークでは、DAOを作成する場合、

  • インターフェース
  • 実装クラス

を作成します。これは、DAOフレームワークに限った事ではなく
通常のクラス設計でも同じことですが。

DAOフレームワークには、DAO設定ファイルにて、定義したcontextの
transactionMangerに対応するテンプレートクラスが定義されています。
実装クラスは、定義したtransactionMangerに対応するテンプレートクラスを
継承し、さらに自分で定義したインターフェースを実装する形になります。

今回の例でいうと、前回定義したcontextでは、transactionManagerをSQLMAPと
しましたので、対応するテンプレートクラスは、

  • com.ibatis.dao.client.template.SqlMapDaoTemplate

となります。このテンプレートクラスからは、SqlMapExecutorが取得できたり、
queryForListなどのショートカットメソッドが用意されています。

今回使用するDDLです。

 -- vim:set ts=4 sw=4 et ws is nowrap ft=sql:
 --
 -- DDL
 --
CREATE TABLE SAMPLE012_TEST_TABLE(
     id int auto_increment
    ,value varchar(10) not null
    ,primary key(id)
);

 --
 -- サンプルデータ
 --
insert into SAMPLE012_TEST_TABLE (value) values ('value-01');
insert into SAMPLE012_TEST_TABLE (value) values ('value-02');
insert into SAMPLE012_TEST_TABLE (value) values ('value-03');
insert into SAMPLE012_TEST_TABLE (value) values ('value-04');
insert into SAMPLE012_TEST_TABLE (value) values ('value-05');
insert into SAMPLE012_TEST_TABLE (value) values ('value-06');

次に、いつもどおりにSqlマッピングファイルを作成します。
今回は、データの取得のみを行います。

<?xml version="1.0" encoding="Windows-31J"?>
<!-- vim:set ts=4 sw=4 et ws is nowrap ft=xml: -->
<!DOCTYPE sqlMap 
          PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
          "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="DaoSample1">

    <typeAlias alias="Sample012TestTable" type="gsf.samples.ibatis.sample012.Sample012TestTable"/>

    <select id="findAllSample012TestTable" resultClass="Sample012TestTable">
        select
             id
            ,value
        from
            SAMPLE012_TEST_TABLE
        order by
            id
    </select>

</sqlMap>

次に、これもいつもと同じようにデータクラスの定義.

// vim:set ts=4 sw=4 et ws is nowrap ft=java:
package gsf.samples.ibatis.sample012;

import java.io.*;

import org.apache.commons.lang.builder.*;

public class Sample012TestTable implements Serializable{

    /** ID */
    private Integer id;

    /** VALUE */
    private String  value;

    /**
     * コンストラクタ.<br/>
     *
     */
    public Sample012TestTable(){
        // nop;
    }
    
    /**
     * Get id.
     *
     * @return id as Integer.
     */
    public Integer getId(){
        return this.id;
    }
    
    /**
     * Set id.
     *
     * @param id the value to set.
     */
    public void setId(Integer id){
        this.id = id;
    }
    
    /**
     * Get value.
     *
     * @return value as String.
     */
    public String getValue(){
        return this.value;
    }
    
    /**
     * Set value.
     *
     * @param value the value to set.
     */
    public void setValue(String value){
        this.value = value;
    }

    @Override
    public String toString(){
        return new ReflectionToStringBuilder(this).toString();
    }
}

ここまで、定義したら、SQLMAP設定ファイルにマッピングファイルを定義しておきます。

ここまでは、SqlMapを使用しているパターンと全く同じです。

長くなったので、DAOの作成は、次にします。