原标题:Spring认证中国教育管理中心-Spring Data R2DBC框架教程三(Spring中国教育管理中心)
14.2.查询方法
您通常在存储库上触发的大多数数据访问操作都会导致对数据库运行查询。定义这样的查询就是在存储库接口上声明一个方法,如以下示例所示:
示例 61.带有查询方法的 PersonRepository
interface ReactivePersonRepository extends ReactiveSortingRepository<Person, Long> {
Flux<Person> findByFirstname(String firstname);
Flux<Person> findByFirstname(Publisher<String> firstname);
Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable);
Mono<Person> findByFirstnameAndLastname(String firstname, String lastname);
Mono<Person> findFirstByLastname(String lastname);
@Query("SELECT * FROM person WHERE lastname = :lastname")
Flux<Person> findByLastname(String lastname);
@Query("SELECT firstname, lastname FROM person WHERE lastname = $1")
Mono<Person> findFirstByLastname(String lastname);
}
该方法显示了对所有具有给定 的人的查询firstname。该查询是通过解析可以与And和连接的约束的方法名称来派生的Or。因此,方法名称导致查询表达式为SELECT … FROM person WHERE firstname = :firstname。
firstname一旦给定的firstname发出 ,该方法就会显示对所有具有给定的人的查询Publisher。
使用Pageable来抵消和排序参数传递到数据库。
查找给定条件的单个实体。它以
IncorrectResultSizeDataAccessException非唯一结果结束。
除非 <4>,否则即使查询产生更多结果行,也总是发出第一个实体。
该findByLastname方法显示了对所有具有给定姓氏的人的查询。
对Person仅投影firstname和lastname列的单个实体的查询。带注释的查询使用本机绑定标记,在本例中是 Postgres 绑定标记。
请注意,@Query注释中使用的 select 语句的列必须与NamingStrategy为相应属性生成的名称匹配。如果 select 语句不包含匹配的列,则不会设置该属性。如果持久性构造函数需要该属性,则提供 null 或(对于原始类型)默认值。
下表显示了查询方法支持的关键字:
14.2.1.修改查询
前面的部分描述了如何声明查询以访问给定的实体或实体集合。使用上表中的关键字可以与删除匹配行的派生查询结合使用delete…By或remove…By创建派生查询。
示例 62.Delete…By查询
interface ReactivePersonRepository extends ReactiveSortingRepository<Person, String> {
Mono<Integer> deleteByLastname(String lastname);
Mono<Void> deletePersonByLastname(String lastname);
Mono<Boolean> deletePersonByLastname(String lastname);
}<