Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

本文深入探讨了Spring Data R2DBC框架中关于查询方法的使用,包括派生查询、SpEL表达式、按例查询、实体状态检测策略等。此外,还介绍了如何进行修改查询,如删除和更新操作,以及使用@Modifying注解进行自定义修改。文章还涵盖了乐观锁定机制,防止并发更新冲突,并讨论了不同类型的投影,如基于接口的投影、封闭式和开放式投影,以及动态投影的实现。
摘要由CSDN通过智能技术生成

原标题: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 绑定标记。

Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

请注意,@Query注释中使用的 select 语句的列必须与NamingStrategy为相应属性生成的名称匹配。如果 select 语句不包含匹配的列,则不会设置该属性。如果持久性构造函数需要该属性,则提供 null 或(对于原始类型)默认值。

下表显示了查询方法支持的关键字:

Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

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);      
}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技能咖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值