いろいろ備忘録日記

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

iBatis奮闘記-0017 (iBatis Data Access Object Frameworkの設定)

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を書いてみて動作確認してみます。