返回介绍

5.2 QueryDslJdbcTemplate

发布于 2025-04-22 19:57:18 字数 1787 浏览 0 评论 0 收藏

Spring Data 与 Querydsl 集成的核心类是 QueryDslJdbcTemplate。它对 Spring 标准的 Jdbc-Template 进行了包装,这个类具有管理 SQLQuery 实例和执行查询的方法,另外还具有一些方法,可以按照命令特定的回调执行插入、更新以及删除操作。我们将会在这一部分涵盖上述的所有内容,但首先需要创建 QueryDslJdbcTemplate。

要配置 QueryDslJdbcTemplate,只需要在构造器中传入 DataSource:

c0514

或者是一个配置好的 JdbcTemplate:

c0515

现在已经具有了配置好的 QueryDslJdbcTemplate 供使用。在前面我们看到,当创建 SQLQuery 对象的时候,通常需要提供 Connection 和匹配数据库的 SQLTemplates。不过,当使用 QueryDslJdbcTemplate 的时候,没有必要这样做。按照通常的 Spring 编程风格,JDBC 层会管理所有的数据库资源,如连接和结果集。它还会根据所管理的连接,提供基于数据库元数据的 SQLTemplates 实例。为了获得所管理的 SQLQuery 实例,需要使用 QueryDslJdbcTemplate 的静态工厂方法 newSqlQuery:

c0516

所获得的 SQLQuery 实例还没有活跃的连接,所以需要使用 QueryDslJdbcTemplate 的 query 方法以便连接管理生效:

c0517

这里有两个查询方法:query 会返回一个 List 而 queryForObject 只会返回一个结果。每个方法又有 3 种重载的版本,分别接收如下的参数。

  • 通过 newSqlQuery 工厂方法获得的 SQLQuery 对象。
  • 如下映射器和投射实现组合的某一种:
    • RowMapper 以及用一个或多个 Expression 构成的投射;
    • ResultSetExtractor 以及用一个或多个 Expression 构成的投射;
    • ExpressionBase,通常表现为 QBean 或 MappingProjection。

前两个映射器 RowMapper 和 ResultSetExtractor 是标准的 Spring 接口,在常规的 JdbcTemplate 中也经常用到。它们负责抽取查询所返回的结果数据。ResultSet Extractor 会抽取返回的所有行的数据,而 RowMapper 只会处理一行并且对每行数据会重复调用。QBean 和 MappingProjection 是 Querydsl 的类,同样也是映射一行数据。选择哪一个完全取决于你;它们都能完成相同的任务。对于我们的大多数例子将会使用 Spring 类型 - 毕竟我们这本书叫做《Spring Data 实战》。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。