gpt4 book ai didi

java - 在 JpaRepository 中,如果一个参数对于许多查询方法来说是通用的,那么如何在 Repository 和 Service 中尽可能地做到最好

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:27 26 4
gpt4 key购买 nike

public interface UserRepo extends JpaRepository<User, Long> {

public List<User> findById(long id);

public List<User> findByEmail(String email);

public List<User> findByEmailAndCode(String email, Code code);

public List<User> findByEmailAndClassType(String email, ClassType code);

}

public class UserService {
@Autowired
UserRepo userRepo;

public List<user> fetchByClassType(ClassType ct) {
return userRepo.findByEmailAndClassType("email", ct);
}

}

here email need to fetch once how to avoid it many time to go on database or any other solution in controller it need to give again and again in each request mapping ...suggest

最佳答案

您可以选择规范,而不是创建一堆类似的存储库方法。

请参阅此处的文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

您必须扩展 JpaSecificationExecutor:

public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecificationExecutor {
...
}

然后您将获得一个接受规范的 findAll() 方法。

创建如下规范:

 public static Specification<Customer> isLongTermCustomer() {
return new Specification<Customer>() {
public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query,
CriteriaBuilder builder) {

LocalDate date = new LocalDate().minusYears(2);
return builder.lessThan(root.get(_Customer.createdAt), date);
}
};
}

或者,如果您不喜欢 JPA Criteria API,您也可以使用 QueryDSL:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.extensions.querydsl

关于java - 在 JpaRepository 中,如果一个参数对于许多查询方法来说是通用的,那么如何在 Repository 和 Service 中尽可能地做到最好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51670896/

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