gpt4 book ai didi

java - 如何在 Spring Boot 中过滤所有数据库操作的某些记录

转载 作者:行者123 更新时间:2023-12-04 12:27:21 31 4
gpt4 key购买 nike

我正在尝试创建一个 API,以使用 Spring Boot Data JDBC 从数据库中检索记录。
假设我有以下实体:

record Customer(@Id Long id, String name) {}
和以下存储库:
public interface CustomerRepository extends CrudRepository<Customer, Long> { }
然后 customerRepository.findAll()整齐地返回 List<Customer>包含所有客户,以及 repository.findById(23)成功找到 id #23 的客户,前提是这样的客户确实存在。
现在底层数据库表有一个额外的列 isDisabled ,其中包含 01 .我希望我的 API 排除客户被禁用的所有记录。
我可以创建查询,手动排除这些记录,如下所示:
public interface CustomerRepository extends CrudRepository<Customer, Long> {

@Query("""
SELECT id, name
FROM Customers
WHERE id = :id
AND isDisabled = 0
""")
@Override
public Optional<Customer> findById(@Param("id") String id);
}
这有效,但问题是我必须对所有数据库检索查询执行此操作,包括 findAll , findByName等等。
有没有办法以某种方式一次过滤所有检索查询的这些记录?
例如,假设我们有下表:


ID
姓名
被禁用


1
爱丽丝
0

2
布列塔尼
1

3
卡罗琳
0

4
达科他州
0


然后 findAll()会回来
[
Customer(1, Alice),
Customer(3, Caroline),
Customer(4, Dakota)
]
同样, findById(2)将返回一个空 Optional .

最佳答案

您似乎正在尝试实现“软删除”类型的功能。您可以将以下注释添加到您的实体中,这将满足您的要求:

@Where(clause = "isDisabled=0")
this link有关软删除的更多信息。

关于java - 如何在 Spring Boot 中过滤所有数据库操作的某些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69739464/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com