第 326 章 SQL 组件
从 Camel 版本 1.4 开始提供
sql: 组件允许您使用 JDBC 查询来处理数据库。此组件和 JDBC 组件之间的区别在于,如果 SQL 查询是端点的属性,它将消息有效负载用作传递给查询的参数。
此组件在后台使用 spring-jdbc
进行实际的 SQL 处理。
Maven 用户需要将以下依赖项添加到这个组件的 pom.xml
中:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-sql</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
SQL 组件还支持:
- 基于 JDBC 的存储库用于 Idempotent Consumer EIP 模式。请参阅 第 326.13 节 “使用基于 JDBC 的幂等存储库”。
- 基于 JDBC 的存储库用于聚合器 EIP 模式。请参阅 第 326.14 节 “使用基于 JDBC 的聚合存储库”。
326.1. URI 格式
WARNING:From Camel 2.11 开始此组件可以创建消费者(如 from ()
)和生成者端点(如 to ()
)。在以前的版本中,它只能充当生成者。
INFO:此组件可用作 事务客户端。
SQL 组件使用以下端点 URI 表示法:
sql:select * from table where id=# order by name[?options]
从 Camel 2.11 开始,您可以使用命名的参数,使用 :' instname_of_the_parameter' 风格,如下所示:
sql:select * from table where id=:#myId order by name[?options]
使用命名参数时,Camel 将在给定优先级:
1 中查找名称。如果它有一个 java.util.Map
2,则来自消息正文。来自消息标头
如果无法解析指定参数,则抛出异常。
从 Camel 2.14 开始,您可以使用 Simple 表达式作为参数,如下所示:
sql:select * from table where id=:#${property.myId} order by name[?options]
请注意,表示 SQL 查询参数的标准 ?
符号被 @ 符号替换,因为 ?
符号用于指定端点的选项。?
符号替换可根据端点进行配置。
从 Camel 2.17 开始,您可以将 SQL 查询外部化到 classpath 或文件系统中的文件,如下所示:
sql:classpath:sql/myquery.sql[?options]
myquery.sql 文件位于 classpath 中,且只是纯文本
-- this is a comment select * from table where id = :#${property.myId} order by name
在文件中,您可以根据需要使用多行并格式化 SQL。和 也会使用诸如 - dash 行等注释。
您可以在 URI 中附加查询选项,格式为 ?option=value&option=value&…