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);
}
}
在这里,电子邮件需要获取一次,如何避免多次进入数据库或控制器中的任何其他解决方案,这需要在每个请求映射中一次又一次地给出...建议
答案 0 :(得分:0)
代替创建一堆类似的存储库方法,您可以使用规范。
在此处查看文档:{{3}}
您必须扩展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/#specifications