【问题标题】:spring repository data dynamic query for filter multi parameters过滤器多参数的spring存储库数据动态查询
【发布时间】:2019-07-08 13:07:04
【问题描述】:

我有一个实体类,它有 5 个参数,姓名、家庭、电子邮件、地址、年龄。单独或分组搜索这些应该是动态的。这是在我想一个人写的情况下,整个空间都被占用了。我怎样才能给他们写一个动态队列?

@Repository
public interface MyRepository extends JpaRepository<MyEntity1, Long> {
    Page<DirectTopup> findAllByName(Pageable pageable, String name);
    Page<DirectTopup> findAllByNameAndFamily(Pageable pageable, String name, , String family);
    Page<DirectTopup> findAllByNameAndFamilyAndEmail(Pageable pageable, String name, , String family, String email);

...

    Page<DirectTopup> findAllByNameAndFamilyAndEmail(Pageable pageable, String name, , String family, String email, String address, int age)

}

对于每个可能的调用,参数是 Zer 和 Nal,或者什么都没有。 请指教

if (name != null && family == null && email == null && address == null && age ==null){
myRepository.findAllByName(new PageRequest(page, size, direction, propertie), name);
}

if (name == null && family != null && email == null && address == null && age ==null){
    myRepository.findAllByFamily(new PageRequest(page, size, direction, propertie), family);
    }

...和所有参数

所有分隔值分开。

    if (name != null && family != null && email != null && address == null && age ==null){
        myRepository.findAllByNameAndFamilyAndEmail(new PageRequest(page, size, direction, propertie), name, family, email);
        }
....

并将它们组合起来(多参数):

而且可能是参数的组合

【问题讨论】:

标签: spring spring-data-jpa spring-repositories


【解决方案1】:

您可以在这种情况下使用规范接口。 通过这个link

一旦你通过上面的链接然后使用这个谓词 对于动态过滤列,请使用此谓词:

@Override
        public Predicate toPredicate(Root<MyEntity1> root, CriteriaQuery<?> query, CriteriaBuilder cb) 
        {
            List<Predicate> predicates = new ArrayList<Predicate>();


            if(StringUtils.isNotEmpty(name))
            {
                predicates.add(cb.like(cb.lower(root.get("name")), "%"+name.toLowerCase()+"%"));
            }

            if(StringUtils.isNotEmpty(family))
            {
                predicates.add(cb.like(cb.lower(root.get("family")), "%"+family.toLowerCase()+"%"));
            }

            return cb.and(predicates.toArray(new Predicate[] {}));
        }

这个example 也会很有帮助。

【讨论】:

  • 这个建议完全不对,不过我们会完整的查询,查询量会增加。
  • 请问'inquiry' 是什么意思?你的意思是在查询中?
  • “查询”,对不起。 @Pratik soni
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 2021-11-11
  • 2016-07-02
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多