JPA 利用javax.persistence.criteria类做复杂查询

本文介绍了JavaAPI中关于数据查询的功能,如findAllTest方法用于获取分页的Delegation对象列表,而getSerachInfo方法则是通过Specification构建查询条件,支持listedType、operatorId和area的过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. /**
  2. * 数据查询测试
  3. * @param listedType
  4. * @param operatorId
  5. * @param area
  6. * @return
  7. */
  8. public PagedResponse<Delegation> findAllTest(Integer listedType,String operatorId,String area,Pageable pageable){
  9. Page<Delegation> lists = delegationRepository.findAll(getSerachInfo(listedType,operatorId,area),pageable);
  10. return new PagedResponse<>(lists.getContent(), lists.getNumber(), lists.getSize(), lists.getTotalElements(), lists.getTotalPages(), lists.isLast());
  11. }
  12. public Specification<Delegation> getSerachInfo(Integer listedType,String operatorId,String area){
  13. return new Specification<Delegation>() {
  14. @Override
  15. public Predicate toPredicate(Root<Delegation> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
  16. Join<Delegation,HousingRegistration> join = root.join("housingRegistration",JoinType.INNER);
  17. List<Predicate> predicateList = Lists.newArrayList();
  18. Path<Integer> listedTypePath = root.get("listedType");
  19. if(listedType!=null){
  20. Predicate predicate = criteriaBuilder.equal(listedTypePath,listedType);
  21. predicateList.add(predicate);
  22. }else {
  23. Predicate predicate0 = criteriaBuilder.equal(listedTypePath,0);
  24. Predicate predicate1 = criteriaBuilder.equal(listedTypePath,1);
  25. Predicate predicate = criteriaBuilder.or(predicate0,predicate1);
  26. predicateList.add(predicate);
  27. }
  28. if(StringUtils.isNotBlank(operatorId)){
  29. Path<String> operatorIdPath = root.get("practitionersId");
  30. Predicate predicate = criteriaBuilder.equal(operatorIdPath,operatorId);
  31. predicateList.add(predicate);
  32. }
  33. if(StringUtils.isNotBlank(area)){
  34. Path<String> areaPath = join.get("area");
  35. Predicate predicate = criteriaBuilder.equal(areaPath,area);
  36. predicateList.add(predicate);
  37. }
  38. Predicate predicateResult = null;
  39. if(predicateList!=null && predicateList.size()>0){
  40. for(Predicate predicate:predicateList){
  41. if(predicateResult==null){
  42. predicateResult = predicate;
  43. }else {
  44. predicateResult = criteriaBuilder.and(predicateResult,predicate);
  45. }
  46. }
  47. }
  48. return predicateResult;
  49. }
  50. };
  51. }
Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence.AssociationOverrides.class javax.persistence.AttributeOverride.class javax.persistence.AttributeOverrides.class javax.persistence.Basic.class javax.persistence.Cache.class javax.persistence.Cacheable.class javax.persistence.CacheRetrieveMode.class javax.persistence.CacheStoreMode.class javax.persistence.CascadeType.class javax.persistence.CollectionTable.class javax.persistence.Column.class javax.persistence.ColumnResult.class javax.persistence.criteria.AbstractQuery.class javax.persistence.criteria.CollectionJoin.class javax.persistence.criteria.CompoundSelection.class javax.persistence.criteria.CriteriaBuilder.class javax.persistence.criteria.CriteriaQuery.class javax.persistence.criteria.Expression.class javax.persistence.criteria.Fetch.class javax.persistence.criteria.FetchParent.class javax.persistence.criteria.From.class javax.persistence.criteria.Join.class javax.persistence.criteria.JoinType.class javax.persistence.criteria.ListJoin.class javax.persistence.criteria.MapJoin.class javax.persistence.criteria.Order.class javax.persistence.criteria.ParameterExpression.class javax.persistence.criteria.Path.class javax.persistence.criteria.PluralJoin.class javax.persistence.criteria.Predicate.class javax.persistence.criteria.Root.class javax.persistence.criteria.Selection.class javax.persistence.criteria.SetJoin.class javax.persistence.criteria.Subquery.class javax.persistence.DiscriminatorColumn.class javax.persistence.DiscriminatorType.class javax.persistence.DiscriminatorValue.class javax.persistence.ElementCollection.class javax.persistence.Embeddable.class javax.persistence.Embedded.class javax.persistence.EmbeddedId.class javax.persistence.Entity.class javax.persistence.EntityExistsException.class javax.persistence.EntityListeners.class javax.persistence.EntityManager.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值