第 48 章 SQL


支持生成者和消费者

SQL 组件允许您使用 JDBC 查询来使用数据库。此组件和 JDBC 组件之间的区别在于,如果 SQL 查询是端点的属性,它将消息有效负载用作传递给查询的参数。

此组件使用 spring-jdbc 在 scenes 后面用于实际 SQL 处理。

Maven 用户需要将以下依赖项添加到此组件的 pom.xml 中:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-sql</artifactId>
    <version>3.14.5.redhat-00018</version>
    <!-- use the same version as your Camel core version -->
</dependency>

SQL 组件还支持:

  • 基于 JDBC 的存储库,用于 Idempotent Consumer EIP 模式。请参阅以下进一步。
  • 基于 JDBC 的存储库,用于聚合器 EIP 模式。请参阅以下进一步。

48.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 将以给定优先级从中查找名称:

  1. 如果其 java.util.Map,则来自邮件正文
  2. 来自消息标头

如果无法解析指定参数,则抛出异常。

您可以使用简单表达式作为参数,如下所示:

sql:select * from table where id=:#${exchangeProperty.myId} order by name[?options]

请注意,表示 SQL 查询参数的标准 ? 符号被替换为 # 符号,因为 ? 符号用于指定端点的选项。可以基于端点配置 ? 符号替换。

您可以将 SQL 查询外部化到 classpath 或文件系统中的文件,如下所示:

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 行。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.