第72章 iBATIS


iBATIS

ibatis: コンポーネントを使用すると、Apache iBATIS を使用して、リレーショナルデータベースでデータのクエリー、ポーリング、挿入、更新、および削除を行うことができます。
Prefer MyBatis
Apache iBatis プロジェクトがアクティブではなくなりました。プロジェクトは Apache の外部に移動し、MyBatis プロジェクトとして知られています。したがって、代わりに MyBatis を使用することが推奨されます。この camel-ibatis コンポーネントは Camel 3.0 で削除されます。
ibatis は Spring 4.x をサポートしません。そのため、Spring 3.x 以前のみを iBatis で使用できます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ibatis</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

ibatis:statementName[?options]
Copy to Clipboard Toggle word wrap
statementName は、評価するクエリー、挿入、更新、または削除の操作にマップする iBATIS XML 設定ファイルの名前です。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。
このコンポーネントはデフォルトで、クラスパスのルートから iBatis SqlMapConfig ファイルをロードし、SqlMapConfig.xml という名前が付けられたことが予想されます。Spring リソースの読み込みを使用するため、クラスパスファイル、または http を接頭辞として使用し、これらのスキームでリソースを読み込むことができます。Camel 2.2 では、setSqlMapConfig (String) メソッドを使用して iBatisComponent でこれを設定できます。

オプション

Expand
オプション デフォルト 説明
consumer.onConsume 文字列 null 消費後に実行するステートメント。たとえば、Apache Camel で消費および処理された後に行を更新するために使用できます。後ほどサンプル を参照してください。複数のステートメントはコンマで区切ることができます。
consumer.useIterator boolean true true の場合、ポーリングが個別に処理されるときに返される各行。false の場合、データの リスト 全体が IN ボディーとして設定されます。
consumer.routeEmptyResultSet boolean false Apache Camel 2.0: 空の結果セットをルーティングするかどうかを設定します。デフォルトでは、空の結果セットはルーティングされません。
statementType StatementType null Apache Camel 1.6.1/2.0: 呼び出す iBatisis SqlMapClient メソッドを制御するために IbatisProducer に指定する必要があります。enum 値は QueryForObjectQueryForListInsertUpdateDelete です。
maxMessagesPerPoll int 0 Apache Camel 2.0: ポーリングごとに収集する最大メッセージを定義する整数。デフォルトでは最大値は設定されていません。たとえば制限を 1000 などに設定して、数千のファイルがあるサーバーの起動を回避できます。無効にするには、0 または負の値を設定します。
分離 文字列 TRANSACTION_REPEATABLE_READ *Camel 2.9:* 文字列 は、のトランザクション分離レベルを定義します。使用できる値は TRANSACTION_NONE、TRANSACTION_READ_UNCOMMITTED、TRANSACTION_READ_COMMITTED、TRANSACTION_REPEATABLE_READ、TRANSACTION_SERIALIZABLE です。
Expand
分離 文字列 TRANSACTION_REPEATABLE_READ *Camel 2.9:* 文字列 は、のトランザクション分離レベルを定義します。使用できる値は TRANSACTION_NONE、TRANSACTION_READ_UNCOMMITTED、TRANSACTION_READ_COMMITTED、TRANSACTION_REPEATABLE_READ、TRANSACTION_SERIALIZABLE です。

メッセージヘッダー

Apache Camel は、IN または OUT のいずれかの結果を、使用する operationName のヘッダーで入力します。
Expand
ヘッダー タイプ 説明
CamelIBatisStatementName 文字列 Apache Camel 2.0: 使用される statementName (例:insertAccount)。
CamelIBatisResult オブジェクト Apache Camel 1.6.2/2.0: いずれかの操作で iBatis から返される 応答。たとえば、INSERT は自動生成キーや行数などを返すことができます。

メッセージボディー

Apache Camel 1.6.2/2.0: iBatis からの応答は、SELECT ステートメントである場合にのみボディーとして設定されます。つまり、たとえば、Apache Camel は INSERT ステートメントではボディーを置き換えません。これにより、ルーティングを継続し、元のボディーを維持することができます。iBatis からの応答は、常にキー CamelIBatisResult を持つヘッダーに保存されます。

サンプル

たとえば、JMS キューから Bean を使用し、それらをデータベースに挿入する場合は、以下を実行できます。
from("activemq:queue:newAccount").
  to("ibatis:insertAccount?statementType=Insert");
Copy to Clipboard Toggle word wrap
statementType を指定する必要があります。これは、Apache Camel に対して SqlMapClient 操作を呼び出すよう指示します。
insertAccount は、SQL マップファイルの iBatis ID に置き換えます。
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertAccount" parameterClass="Account">
    insert into ACCOUNT (
      ACC_ID,
      ACC_FIRST_NAME,
      ACC_LAST_NAME,
      ACC_EMAIL
    )
    values (
      #id#, #firstName#, #lastName#, #emailAddress#
    )
  </insert>
Copy to Clipboard Toggle word wrap

StatementType を使用した IBatis の制御の強化

Apache Camel 1.6.1/2.0 で利用可能: iBatis エンドポイントへのルーティングでは、より詳細な制御が必要です。これにより、実行する SQL ステートメントが SELEECTUPDATEDELETE、または INSERT であるかを制御できます。これは Apache Camel 1.6.1/2.0 で実行できるようになりました。たとえば、IN ボディーに SELECT ステートメントへのパラメーターが含まれる iBatis エンドポイントにルーティングする場合は、以下を実行できます。
from("direct:start")
    .to("ibatis:selectAccountById?statementType=QueryForObject")
    .to("mock:result");
Copy to Clipboard Toggle word wrap
上記のコードでは、iBatis ステートメント selectAccountById を呼び出し、IN 本文に 整数 タイプなどの取得するアカウント ID が含まれる必要があります。
QueryForList などの他の操作でも同じことができます。
from("direct:start")
    .to("ibatis:selectAllAccounts?statementType=QueryForList")
    .to("mock:result");
Copy to Clipboard Toggle word wrap
また UPDATE と同じです。ここで、Account オブジェクトを IN ボディーとして iBatis に送信できます。
from("direct:start")
    .to("ibatis:updateAccount?statementType=Update")
    .to("mock:result");
Copy to Clipboard Toggle word wrap

スケジュールされたポーリングの例

このコンポーネントはスケジュールされたポーリングをサポートしないため、Timer コンポーネントや Quartz コンポーネントなどのスケジュールされたポーリングをトリガーする別のメカニズムを使用する必要があります。
以下の例では、Timer コンポーネントを使用して 30 秒ごとにデータベースをポーリングし、データを JMS キューに送信します。
from("timer://pollTheDatabase?delay=30000").to("ibatis:selectAllAccounts?statementType=QueryForList").to("activemq:queue:allAccounts");
Copy to Clipboard Toggle word wrap
また、使用されている iBatis SQL マップファイルは次のとおりです。
  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllAccounts" resultMap="AccountResult">
    select * from ACCOUNT
  </select>
Copy to Clipboard Toggle word wrap

onConsume の使用

このコンポーネントは、Apache Camel によってデータが消費および処理された のステートメントの実行をサポートします。これにより、データベースで更新後の更新を行うことができます。すべてのステートメントは UPDATE ステートメントである必要があることに注意してください。Apache Camel は、名前をコンマで区切る必要がある複数のステートメントの実行をサポートします。
以下のルートは、consumeAccount ステートメントデータが処理されることを示しています。これにより、データベースの行のステータスを processed に変更できるため、2 回以上消費しないようにします。
from("ibatis:selectUnprocessedAccounts?consumer.onConsume=consumeAccount").to("mock:results");
Copy to Clipboard Toggle word wrap
および sqlmap ファイルのステートメントは、以下のようになります。
<select id="selectUnprocessedAccounts" resultMap="AccountResult">
     select * from ACCOUNT where PROCESSED = false
</select>
Copy to Clipboard Toggle word wrap
<update id="consumeAccount" parameterClass="Account">
     update ACCOUNT set PROCESSED = true where ACC_ID = #id#
</update>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat