QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

iBatisのsqlMapConfig.xmlを分割

いつも参考にさせていただいております。

現在、iBatisを使用したアプリケーションを作成しておりますが、
sqlMapConfigを複数ファイルに分割する方法が見つからず、
こちらに質問させていただきました。

・sqlMapConfig.xmlから別のsqlMapConfig.xmlをインポート
・SqlMapClient生成時に複数のsqlMapConfig.xmlを指定
のようなイメージの方法がないかと調査しています。

目的は以下のようなことを実現する為です。
・sqlMapファイルが増えた場合にサブシステムごとに分割
・共通フレームワーク分と処理固有部分で分割し、
各開発者に共通部分を触らせたくない。

もし何かご存知の方がいらっしゃいましたらご教授いただければ幸いです。
よろしくお願いいたします。

質問者:takashi

回答

この件についてですが、
下記ドキュメントに記載されているように
「SQL Map設定ファイルのエレメントで別のSQL Map設定ファイルを記述する方法」
を実装してみたのですが、
takashiさんと同じ結果になってしまい、うまく実装できません。

Webで関係のあるサイトをいろいろ調べてみたり、
実際に、iBATISのSQL Map設定ファイルの解析を行っているクラス
(com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser)のソースを読んでもみましたが、
「SQL Map設定ファイルのエレメントで別のSQL Map設定ファイルを記述する方法」
に関する記述を発見することができませんでした。

個人的な見解としましては、「ドキュメントが間違っているのではないか?」
という結果なのですが、Javaの有識者である皆様方はどのようなお考えなのでしょうか?

また、「SQL Map設定ファイルのエレメントで別のSQL Map設定ファイルを記述する方法」
があるという場合にはその例を提示していただけませんでしょうか?

英語版ドキュメント
http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-2/ibatis-2-docs/en/iBATIS-SqlMaps-2_en.pdf

日本語版ドキュメント
http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-2/ibatis-2-docs/ja/iBATIS-SqlMaps-2_ja.pdf

投稿者:まんづ

編集 履歴 (0)

>sqlMapConfigを複数ファイルに分割する方法が見つからず
とりあえず公式の日本語ドキュメント読みました?
http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-2/ibatis-2-docs/ja/

まあ、英語の方でもいいんですが。

マイクロソフトみたいにデカイサイトで無いなら
最低限公式ページは調べてから見つからないとかいった方が良いかもね。

投稿者:assa

編集 履歴 (0)

ご回答ありがとうございます。

公式のドキュメント内に、sqlMapエレメントで別のsqlMapConfigも指定できる旨記載されておりました。

大変失礼いたしました。

投稿者:takashi

編集 履歴 (0)

以下のように試してみましたが、インポート先のSqlMapファイルが認識されませんでした。




\---- SqlMapConfig.xml ----
<sqlMapConfig>
  <settings
    useStatementNamespaces="true"
  />

  <!-- DB接続設定 -->
  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
    <property name="JDBC.Driver" value="${Driver}"/>
    <property name="JDBC.ConnectionURL" value="${URL}"/>
    <property name="JDBC.Username" value="${USER}"/>
    <property name="JDBC.Password" value="${PASS}"/>
    </dataSource>
  </transactionManager>

  <!-- 別のSqlMapConfigファイルをインポート -->
  <sqlMap resource="SqlMapConfig-App.xml"/>
</sqlMapConfig>


\---- SqlMapConfig-App.xml ----
<sqlMapConfig>
  <sqlMap resource="Dept.xml"/>
</sqlMapConfig>


\---- Dept.xml ----
<sqlMap namespace="Dept">
  <select id="findAll" resultClass="java.util.HashMap">
    SELECT * FROM DEPT
  </select>
</sqlMap>

\---- 実行結果 ----
com.ibatis.sqlmap.client.SqlMapException: There is no statement named Dept.findAll in this SqlMap.


上記のようにSqlMapConfigファイルを分割する方法について、
何かご存知の方いらっしゃいませんでしょうか。
よろしくお願いいたします。

投稿者:takashi

編集 履歴 (0)

とりあえず
sqlMapタグのresourceに記述するものが
正確にわからないのであれば
あれば試すのは、一組の組み合わせだけでなく
カレントフォルダはどこなのか
物理的なファイルパスでよいのか、クラスパスからの場所でよいのかなど
組み合わせて試してみることをお勧めします。

新しいフレームワークを試す時には
試行錯誤も結構重要ですよ

投稿者:ふぉんだん

編集 履歴 (0)

ご回答ありがとうございます。

DTDを参照してみたり、ファイル名を変えてみたりいろいろ試行錯誤しているのですが、
どうもそのような事例が見つからずに質問させていただいた次第です。

先の例ですと、
・SqlMapConfig.xmlのsqlMapエレメントでDept.xmlを指定
→正常に動作
・SqlMapConfig-App.xmlのsqlMapエレメントでDept.xmlを指定
→ There is no statement named Dept.findAll in this SqlMap.

・SqlMapConfig.xmlのsqlMapエレメントに存在しないファイル名を指定
→エラー
・SqlMapConfig-App.xmlのsqlMapエレメントに存在しないファイル名を指定
→エラーとならない

という現象から、そもそも認識されていないのではという判断です。

また、resourceへの記述はクラスパスでの指定で良いようです。

引き続きよろしくお願いします。

投稿者:takashi

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。