iBATIS入門

と りあえず動かす

  1. 開 発環境
  2. 簡 単なCRUDアプリの作成
    1. まず、やらなくてはいけないこと
    2. Javaプロジェクトの作成
    3. Abatorによるファイルの自動生 成
    4. SQL Map Configの作成
    5. マッピングファイル (person_SqlMap.xml)にSQL文を追記
    6. 何が起こったのか?
とりあえず、iBATISを動かしてみたいと思います。
今回は、以下の環境で実験します。

開 発環境

簡 単なCRUDアプリの作成

何はともあれ、まずテーブルを作ります。
以下が、今回使用したテーブルです(MySQLのウィザードで作成したのでSQLに余計なものがついていますが、気にしないでください・・・)。
CREATE TABLE `person` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  `version` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

飽くまでも、適当です。

ま ず、やらなくてはいけないこと

iBatisを利用するには、いくつかやらなくてはいけないことがあります。
  1. JavaBeansの作成
  2. ゆわゆるEntityです。
  3. SQL MapConfigファイルの作成
  4. DBの接続情報等を記述します。
  5. SQL Mapファイルの作成
  6. 実行するSQL文を記述します。
※今回はEclipseプラグイン(Abator)を利用して 1 と 3 を自動生成します。

では、実際に作業を進めます。

Java プロジェクトの作成

まずは、Javaプロジェクトを作成します。
とりあず、プロジェクト名は、ibatis-exとかで。
また、MySQLのJDBCドライバと、ibatis-2.3.0.677.jarを適当な場所に配置し、
ビルドパスを通します。

Abator によるファイルの自動生成

Eclipse上でプロジェクトを右クリックし、
ポップアップメニューから、
「New」→「Other」→「Abator for iBATIS Wizard」→「Abator for iBATIS Configuration File」
を選択します。
ダイアログが表示されるので「Next」をクリックしてください。
指定されたファイル名がデフォルトのままなら、abatorConfig.xmlがプロジェクト直下に生成されるはずです。
これに必要な情報を記述すると、DAO、Entity、xmlマッピングファイルを
自動生成してくれます。
このファイルは、以下のように記述します。
(例)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN" "http://ibatis.apache.org/dtd/abator-config_1_0.dtd" >
<abatorConfiguration >
  <abatorContext >
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root" >
      <classPathEntry location="C:\eclipse\workspace\ibatis-ex\lib\mysql-connector-java-5.1.5-bin.jar" />
    </jdbcConnection>
    <javaModelGenerator targetPackage="hoge.ibatis" targetProject="ibatis-ex" />
    <sqlMapGenerator targetPackage="hoge.ibatis" targetProject="ibatis-ex" />
    <daoGenerator targetPackage="hoge.ibatis" targetProject="ibatis-ex" type="GENERIC-CI" />
    <table schema="test" tableName="person" >
      <columnOverride column="id" property="id" javaType="int" jdbcType="INTEGER" />
      <columnOverride column="name" property="name" javaType="String" jdbcType="VARCHAR" />
      <columnOverride column="version" property="version" javaType="int" jdbcType="INTEGER" />
    </table>
  </abatorContext>
</abatorConfiguration>

columnOverrideのcolumn属性は、DB上のテーブルの属性で、propertyはJavaオブジェクトのフィールドです。
念のため・・・。

このファイルをPackage Explore上で右クリックし、「Generate iBatis Artifacts」を選択すると、
ファイルが自動生成されます。
以下のような感じです。
packageexplore1

SQL Map Configの作成

このファイルはデータベース接続情報等を記述します。
sqlMapsConfig.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>
    <settings useStatementNamespaces="true" />
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test" />
            <property name="JDBC.Username" value="root" />
            <property name="JDBC.Password" value="root" />
        </dataSource>
    </transactionManager>

    <sqlMap resource="hoge/ibatis/person_SqlMap.xml" />

</sqlMapConfig>

ほとんど見てのとおりです。sqlMap要素には、先程自動生成されたマッピングファイルの
パスを記述しましょう。

マッ ピングファイル(person_SqlMap.xml)にSQL文を追記

以下の、SQL文を追記します。すでに SQL s文が生成されていますが、今回は自前で記述してみます。
追記する場所は、他の select 文の近くが良いでしょう("select id"で検索してください)。
<select id="getPerson" resultClass="hoge.ibatis.Person">
    select id, name from person where id = #value#
</select>

とうとう次は、iBATISを動かすためのプログラムの作成です。
Mainというクラス名で、いかのコードを記述します。
配置はこんな感じになります。
main
package hoge.ibatis;

import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class Main {
    public static void main(String args[]) throws Exception {
        String resource = "sqlMapsConfig.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);・・・(1)

        // 検索処理
        Person person = (Person) sqlMap.queryForObject("person.getPerson", 1);・・・(2)
        System.out.println(person.getId() + ":" + person.getName());
    }
}

このプログラムは、Person テーブルから id が 1 のレコードを検索する処理です。
適当にDBにデータを insert してから、このプログラムを実行してみましょう。
正常にPersonテーブルのレコードが、表示されるはずです。

何 が起こったのか?

さて何が起こったのでしょうか?
まず、Mainクラスのコードから見てみます。
コード上の(1)で、sqlMapsConfig.xmlを読み込ませて、SqlMapClientのインスタンスを生成しています。
SqlMapClientはiBATISでデータアクセスを行うためのクラスです。
コード上の(2)では、SqlMapClientのqueryForObjectをメソッドを呼び出して、"person.getPerson"と 1 を引数として渡しています。
この"person.getPerson"というのが、person_SqlMap.xml に記述されていたSQL文の id 属性にマッチします。
#今回は、 person ネームスペースに記述したので(解説していませんが、自動生成したSQLMAPファイルがそうなっています)、person. が付加されています。

つまり、
select id, name from person where id = #value#
というSQLが、呼び出されます。
#value# には、引数の値である 1 が代入されます。
そして、SQLの実行結果は、resultClass="hoge.ibatis.Person"となっていますので、
Personクラスにマッピングされます。
マッピングの対応の仕方は、person_SqlMap.xml の上部に記述されています。
abotorプラグインで、person_SqlMap.xmlを自動生成したならば、以下のような記述されているはずです。


  <resultMap class="hoge.ibatis.Person" id="abatorgenerated_PersonResult">
    <result column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="version" jdbcType="INTEGER" property="version" />
  </resultMap>
iBATISは、この記述にしたがって、SQLの実行結果のカラムとJavaオブジェクトのフィールドを対応付けます。

戻る
inserted by FC2 system