- PR -

iBatisのsqlMapConfig.xmlを分割

1
投稿者投稿内容
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2008-10-14 22:17
いつも参考にさせていただいております。

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

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

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

もし何かご存知の方がいらっしゃいましたらご教授いただければ幸いです。
よろしくお願いいたします。
assa
会議室デビュー日: 2005/11/26
投稿数: 19
投稿日時: 2008-10-15 02:28
>sqlMapConfigを複数ファイルに分割する方法が見つからず
とりあえず公式の日本語ドキュメント読みました?
http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-2/ibatis-2-docs/ja/

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

マイクロソフトみたいにデカイサイトで無いなら
最低限公式ページは調べてから見つからないとかいった方が良いかもね。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2008-10-15 09:26
ご回答ありがとうございます。

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

大変失礼いたしました。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2008-10-20 13:24
以下のように試してみましたが、インポート先の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ファイルを分割する方法について、
何かご存知の方いらっしゃいませんでしょうか。
よろしくお願いいたします。

ふぉんだん
会議室デビュー日: 2004/10/06
投稿数: 7
投稿日時: 2008-10-20 13:51
とりあえず
sqlMapタグのresourceに記述するものが
正確にわからないのであれば
あれば試すのは、一組の組み合わせだけでなく
カレントフォルダはどこなのか
物理的なファイルパスでよいのか、クラスパスからの場所でよいのかなど
組み合わせて試してみることをお勧めします。

新しいフレームワークを試す時には
試行錯誤も結構重要ですよ
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2008-10-20 15:55
ご回答ありがとうございます。

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への記述はクラスパスでの指定で良いようです。

引き続きよろしくお願いします。
まんづ
会議室デビュー日: 2006/07/28
投稿数: 7
投稿日時: 2009-03-24 15:25
この件についてですが、
下記ドキュメントに記載されているように
「SQL Map設定ファイルの<sqlMap>エレメントで別のSQL Map設定ファイルを記述する方法」
を実装してみたのですが、
takashiさんと同じ結果になってしまい、うまく実装できません。

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


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

また、「SQL Map設定ファイルの<sqlMap>エレメントで別の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

1

スキルアップ/キャリアアップ(JOB@IT)