- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
5.2 QueryDslJdbcTemplate
Spring Data 与 Querydsl 集成的核心类是 QueryDslJdbcTemplate。它对 Spring 标准的 Jdbc-Template 进行了包装,这个类具有管理 SQLQuery 实例和执行查询的方法,另外还具有一些方法,可以按照命令特定的回调执行插入、更新以及删除操作。我们将会在这一部分涵盖上述的所有内容,但首先需要创建 QueryDslJdbcTemplate。
要配置 QueryDslJdbcTemplate,只需要在构造器中传入 DataSource:
或者是一个配置好的 JdbcTemplate:
现在已经具有了配置好的 QueryDslJdbcTemplate 供使用。在前面我们看到,当创建 SQLQuery 对象的时候,通常需要提供 Connection 和匹配数据库的 SQLTemplates。不过,当使用 QueryDslJdbcTemplate 的时候,没有必要这样做。按照通常的 Spring 编程风格,JDBC 层会管理所有的数据库资源,如连接和结果集。它还会根据所管理的连接,提供基于数据库元数据的 SQLTemplates 实例。为了获得所管理的 SQLQuery 实例,需要使用 QueryDslJdbcTemplate 的静态工厂方法 newSqlQuery:
所获得的 SQLQuery 实例还没有活跃的连接,所以需要使用 QueryDslJdbcTemplate 的 query 方法以便连接管理生效:
这里有两个查询方法: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 实战》。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论