- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 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.4 插入、更新和删除操作
除了刚刚讨论的查询特性,我们最后还要为 CustomerRepository 的实现类添加插入、更新和删除功能。借助于 Querydsl,数据是通过操作特定的 子句 (clause)来进行管理的,如 SQLInsertClause、SQLUpdateClause 和 SQLDeleteClause。在这一部分我们将会介绍借助 QueryDslJdbcTemplate 时如何使用它们。
5.4.1 使用 SQLInsertClause 进行插入操作
想往数据库中插入数据的时候,可以使用 Querydsl 提供的 SQLInsertClause 类。根据表是自动生成主键还是明确提供主键,会有两个不同的 execute(...) 方法。对于自动生成主键的情况,要使用 executeWithKey(...) 方法。这个方法会返回生成的主键,你就可以将其设置到领域对象上。当由你来提供主键的时候,要使用 execute 方法,它会返回受影响的行数。QueryDslJdbcTemplate 有两个对应的方法:insertWithKey(...) 和 insert(...)。
我们所使用的场景是自动生成主键,因此对于数据的插入要使用 insertWithKey(...),如示例 5-14 所示。insertWithKey(...) 方法的参数是查询类型的引用以及 SqlInsertWithKeyCallback 类型的回调,这个回调以生成主键的类型进行参数化。SqlInsertWithKeyCallback 回调接口只有一个名为 doInSqlInsertWithKeyClause(...) 的方法。这个方法以 SQLInsertClause 作为其参数。我们需要使用 SQLInsertClause 来设置值并调用 executeWithKey(...)。调用所返回的主键就是 doInSqlInsertWith KeyClause 的返回值。
示例 5-14 插入对象
5.4.2 使用 SQLUpdateClause 进行更新操作
执行更新操作与插入操作很类似,不过此时不用担心生成主键。QueryDslJdbcTemplate 中的方法称为 update,它接收的参数是查询类型的引用以及 SqlUpdateCallback 类型的回调。SqlUpdateCallback 只有一个名为 doInSqlUpdateClause(...) 的方法,其唯一的参数为 SQLUpdateClause。在设置完更新的值并指明 where 子句后,就可以调用 SQLUpdateClause 的 update 方法,它会返回更新的行数,这个更新的行数也是我们需要从回调中返回的值,如示例 5-15 所示。
示例 5-15 更新对象
5.4.3 使用 SQLDeleteClause 进行删除行操作
删除比更新更为简单,使用 QueryDslJdbcTemplate 的 delete 方法即可,它接收的参数是查询类型的引用以及 SqlDeleteCallback 类型的回调。SqlDeleteCallback 只有一个名为 doInSqlDeleteClause 的方法,其唯一的参数为 SQLDeleteClause。在这里没有必要设置任何的值 - 只需提供 where 子句并执行即可。具体如示例 5-16 所示。
示例 5-16 删除对象
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论