iBatis Data Access Objectフレームワークは、DAOに焦点を絞った簡易DIコンテナ
みたいな役割をもってます。これを利用するとDAOのインターフェースと実装クラスを
分離し、クラス利用側からは、インターフェースのみで扱えるようになります。
余計な機能がなく、すぐ理解できるので使いやすいです。
iBatisには、Sql MapフレームワークとData Access Object(DAO)フレームワークの
2つが存在します。この2つのフレームワークは同じ配布元から提供されていますが、
互いに完全に分離しており、依存していません。つまり、
両者を組み合わせるて使っても、ORマッピング部分には他のものを利用してもOKという
ことになります。実際、iBatis DAOのドキュメントを見ると、Hibernateとの連携方法も
記述されています。
iBatis DAOフレームワークを利用するにあたって、用意しなければならないものは
以下のものです。
また、当然DAOで利用するライブラリも必要です。SqlMapと連携する場合は
以下のものも必要です。
-
- ibatis-common-2.jar
- ibatis-sqlmap-2.jar
- commons-logging-x.x.x.jar
- SqlMap設定ファイル
今回は、SqlMapとの連携について記述します。
まず、iBatis DAOで使用する設定ファイル。
名前は、DaoManagerConfig.xmlとしました。
実際は、DaoManagerオブジェクトを生成する際に指定するので名前は
何でもよいです。このファイルは、SqlMap設定ファイルと同じ場所に
おきました。(クラスパスのルート)
[DaoManagerConfig.xml]
<?xml version="1.0" encoding="Windows-31J"?>
<!-- vim:set ts=4 sw=4 et ws is nowrap ft=xml: -->
<!DOCTYPE daoConfig
PUBLIC "-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
"http://ibatis.apache.org/dtd/dao-2.dtd">
<!--
iBatis Data Access Objectフレームワークの設定ファイル.
daoConfig要素をルート要素とし、中にcontext要素が並ぶ。
<daoConfig>
<!--
使用するコンテキストを記述.
・コンテキストは複数定義できる.
・コンテキストは、中にtransactionManager要素を持つ.
・id属性は、コンテキストを識別するために使用する. 一つしかコンテキストがない場合は省略可能.
-->
<context id="SQLMAP">
<!--
このコンテキスト内で使用するtransactionManagerを定義する.
transactionManagerには、いくつか種類があり、SQLMAPは、
iBatis Sql Mapを利用する設定。
他には、
JDBC
HIBERNATE
などが存在する.
自分で、transactionManagerを作成した場合は、
EXTERNAL
を指定する.
-->
<transactionManager type="SQLMAP">
<!--
transactionManagerがSQLMAPの際に必要となるプロパティ。
iBatis Sql Mapフレームワークで使用している設定ファイルを定義する.
-->
<property name="SqlMapConfigResource" value="SqlMapConfig.
xml"/>
</transactionManager>
<!--
使用しているDAOを定義する.
interface属性に、インターフェースを、implementationに実装クラスを指定する.
定義すると、以下のようにして実装クラスを取得できるようになる。
[interface]: IDao
[class] : DaoImpl
だとすると、
IDao dao = (IDao) daoManager.getDao(IDao.class);
で取得できる.
通常は、これで良いが複数コンテキストに同じDAOを登録しており
それぞれ実装クラスが異なる場合は、daoManagerのgetDaoメソッドに
コンテキストIDを渡す。
IDao dao = (IDao) daoManager.getDao(IDao.class, "SQLMAP");
-->
<dao
interface="gsf.samples.
ibatis.sample012.Sample012TestTableDao"
implementation="gsf.samples.
ibatis.sample012.Sample012TestTableDaoImpl"/>
</context>
</daoConfig>
次は、実際にDAOを書いてみて動作確認してみます。