第46章 SQL
プロデューサーとコンシューマーの両方がサポート対象
SQL コンポーネントでは、JDBC クエリーを使用してデータベースを操作することができます。このコンポーネントと JDBC コンポーネントの相違点は、SQL の場合、クエリーがエンドポイントのプロパティーであり、クエリーに渡されるパラメーターとしてメッセージペイロードを使用ことです。
このコンポーネントは、実際の SQL 処理のために舞台裏で spring-jdbc
を使用します。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-sql</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
SQL コンポーネントは以下もサポートしています。
- Idempotent Consumer EIP パターン用の JDBC ベースのリポジトリー。以下を参照してください。
- Aggregator EIP パターンの JDBC ベースのリポジトリー。以下を参照してください。
46.1. URI 形式
このコンポーネントは、Transactional Client として使用できます。
SQL コンポーネントは、次のエンドポイント URI 表記を使用します。
sql:select * from table where id=# order by name[?options]
次のように :`#name_of_the_parameter` スタイルを使用して、名前付きパラメーターを使用できます。
sql:select * from table where id=:#myId order by name[?options]
名前付きパラメーターを使用する場合、Camel は指定された優先順位で名前を検索します。
-
java.util.Map
の場合はメッセージ本文から - メッセージヘッダーから
名前付きパラメーターを解決できない場合は、例外が出力されます。
次のように、Simple 式をパラメーターとして使用できます。
sql:select * from table where id=:#${exchangeProperty.myId} order by name[?options]
標準 ? SQL クエリーのパラメーターを示す記号は # 記号に置き換えられます。記号は、エンドポイントのオプションを指定するために使用されます。? シンボルの置換は、エンドポイントごとに設定できます。
次のように、SQL クエリーをクラスパスまたはファイルシステム内のファイルに外部化できます。
sql:classpath:sql/myquery.sql[?options]
そして、myquery.sql ファイルはクラスパスにあり、単なるプレーンテキストです。
-- this is a comment select * from table where id = :#${exchangeProperty.myId} order by name
ファイルでは、複数行を使用して、必要に応じて SQL をフォーマットできます。– 破線などのコメントも使用します。