![](/img/trans.png)
[英]how to fetch List of data from Postgres Database using Spring Batch
[英]How to Fetch Data and then Delete it from database using Spring Webflux?
刪除操作不起作用。 我如何獲取數據然后以功能方式刪除它? 代碼成功運行,但未刪除數據庫中的數據。
@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);
}
警報系統=# select * 來自 tb_user;
用戶名 | 用戶名 | 姓名 | email | 密碼 | ph_number | 出生日期| 角色
------+------------+------------+------------ --------------+------------+------------+---------- ----+--------
5 | am0007 | Ajay Maharjan | ajay007@gmail.com | asdfgh1 | 558955697 | 1999-05-21 | ADMIN
案例:不可用的 userId
UserId: 3 Not found
case:可用的userId
User: am0007 deleted!
我正在嘗試以反應方式刪除數據庫中的數據。 我得到預期的 output 但刪除操作不起作用。
這是因為deleteUserById()
是一個反應性操作。 它返回Mono
,但您在doOnNext()
方法中調用它,因此沒有人會訂閱它。 記住規則:在您訂閱之前什么都不會發生
問題是doOnNext()
只是為了產生一些副作用,例如,記錄一些東西。
您應該在flatMap()
運算符中調用 delete 方法
.flatMap(user -> {
userRepository.deleteUserById(userId);
})
因此下游訂閱從該 flatMap 返回的Mono
deleteUserById()
返回了mono<Void>
盡管聲明了Mono<User>
。 所以我所做的是,我將它更改為Mono<Void>
然后添加.thenReturn(user)
從 flatMap 返回Mono<User>
。
return userRepository.findById(userId)
.flatMap(user -> userRepository.deleteUserById(userId).thenReturn(user))
.map(user -> {
log.info("Deleted User: {}", user);
return ResponseEntity.status(HttpStatus.OK).body("User: " + user.getUsername() + " deleted!");
})
.defaultIfEmpty(ResponseEntity.status(HttpStatus.NOT_FOUND).body("UserId: " + userId + " Not found"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.