删除操作不起作用。我如何提取数据,然后删除它的功能方式?代码成功运行,但它不是删除数据库中的数据。
控制器类
@DeleteMapping("/deleteUserById/{userId}")
public Mono<ResponseEntity<String>> deleteUserById(@PathVariable Long userId) {
return userService.deleteUserById(userId);
}
用户服务类
@Override
public Mono<ResponseEntity<String>> deleteUserById(Long userId) {
return userRepository.findById(userId)
.map(user -> {
UserDto deletedUser = UserMapper.USER_MAPPER_INSTANCE.toUserDto(user);
return "User: " + deletedUser.getUsername() + " deleted!";
})
.doOnNext(user -> {
userRepository.deleteUserById(userId);
})
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body("UserId: " + userId + " Not found"));
}
存储库接口
@EnableR2dbcRepositories
public interface UserRepository extends ReactiveCrudRepository<User, Long> {
@Query("SELECT * FROM tb_user WHERE username LIKE $1")
Mono<User> findByUsername(String username);
@Query("DELETE FROM tb_user WHERE userid = $1")
Mono<User> deleteUserById(Long userId);
}
Postgres表
警报系统=#从tb_用户选择 *;
用户识别码|用户名|姓名|电子邮件|密码|pH值|出生日期|角色
-——————-+-————————-+-—————————————-+-——————————————————————————-+-————————-+-——————————-+-—————————————-+-—————-
5 | am0007 | Ajay Maharjan | ajay007@gmail.com | asdfgh1 | 558955697 | 1999-05-21 | ADMIN
输出
- 案例:用户ID不可用**
UserId: 3 Not found
- 案例:可用用户ID**
User: am0007 deleted!
我正在尝试以被动方式删除数据库中的数据。我获得了预期的输出,但删除操作不起作用。
2条答案
按热度按时间vsmadaxz1#
这是因为
deleteUserById()
是一个被动操作,它返回Mono
,但是你在doOnNext()
方法中调用它,所以没有人订阅它。记住规则:在您订阅之前不会发生任何事情问题是
doOnNext()
只是为了添加一些副作用,例如,记录一些东西。应该在
flatMap()
运算符内调用delete方法因此,下游订阅从该flatMap返回的
Mono
xmd2e60i2#
尽管声明了
Mono<User>
,但deleteUserById()
返回了mono<Void>
。因此,我所做的是,将其更改为Mono<Void>
,然后添加.thenReturn(user)
,后者从flatMap返回Mono<User>
。