第 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 组件还支持:
- 基于 JDBC 的存储库,用于 Idempotent Consumer EIP 模式。请参见下面的下面的内容。
- 基于 JDBC EIP 模式的软件仓库。请参见下面的下面的内容。
46.1. URI 格式
此组件可用作 交易客户端。
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 文件位于 classpath 中,只是一个纯文本
-- this is a comment select * from table where id = :#${exchangeProperty.myId} order by name
在文件中,您可以根据需要使用多行并格式化 SQL。和 也使用注释,如 - dash 行。