如何使用具有不同数量参数的 spring 存储库从数据库创建 select?
How to create a select from the database using the spring repositories with a different number of parameters?
我有一个要搜索的过滤器 - 用户名以及两个开始和结束日期。我如何使用存储库将 select 添加到这些字段?
@Service
public class ResolutionServiceDefault implements ResolutionService {
@Autowired
private ResolutionRepository resolutionRepository;
@Override
public List<Resolution> findAllFilter(String user, Date start, Date end) {
if(user!=null)...
if(start!=null)...
if(end!=null)...
//perform a query on the fields that are not null
return .....;
}
}
@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long> {
List<Resolution> findAllByStatus(int status);
List<Resolution> findAll();//String user, Date start, Date end
}
我会使用规范,例如:
@Override
public List<Resolution> findAllFilter(String user, Date start, Date end) {
Specification<Account> specification = new Specification<Account>() {
public Predicate toPredicate(Root<Account> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<Predicate>();
if(user!=null) {
predicates.add(root.get("user").equals(user));
}
if(start!=null) {
predicates.add(root.get("start").equals(start));
}
if(end!=null) {
predicates.add(root.get("end").equals(end));
}
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
};
return repository.findAll(specification);
}
您的存储库需要如下所示:
@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long>, JpaSpecificationExecutor<Resolution> {
}
我有一个要搜索的过滤器 - 用户名以及两个开始和结束日期。我如何使用存储库将 select 添加到这些字段?
@Service
public class ResolutionServiceDefault implements ResolutionService {
@Autowired
private ResolutionRepository resolutionRepository;
@Override
public List<Resolution> findAllFilter(String user, Date start, Date end) {
if(user!=null)...
if(start!=null)...
if(end!=null)...
//perform a query on the fields that are not null
return .....;
}
}
@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long> {
List<Resolution> findAllByStatus(int status);
List<Resolution> findAll();//String user, Date start, Date end
}
我会使用规范,例如:
@Override
public List<Resolution> findAllFilter(String user, Date start, Date end) {
Specification<Account> specification = new Specification<Account>() {
public Predicate toPredicate(Root<Account> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<Predicate>();
if(user!=null) {
predicates.add(root.get("user").equals(user));
}
if(start!=null) {
predicates.add(root.get("start").equals(start));
}
if(end!=null) {
predicates.add(root.get("end").equals(end));
}
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
};
return repository.findAll(specification);
}
您的存储库需要如下所示:
@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long>, JpaSpecificationExecutor<Resolution> {
}