Как написать универсальную Java-функцию в Spring-boot для запроса результатов, основанную на нескольких фильтрах запросов - PullRequest
0 голосов
/ 01 июля 2018

Я работал над java, используя jdo, где я использовал для написания функций запросов, как показано ниже, которые запрашивают у Entity, основываясь на том, какие параметры передаются в функцию. Теперь я перехожу к Spring-Boot, и хочу знать, смогу ли я добиться того же с помощью Spring-Boot. Любая помощь или предложения будут с благодарностью оценены. Спасибо!

public List<Result> getQueryResult(int filter1, String filter2,Float filter3,Long id){
    Query query = new Query("select from Entity1");
    String filter = "id == "+id;
    if(filter1 != null){
      filter = filter+" && filter1 == "+filter1+";
    }
    if(filter2 != null){
    filter = filter+" && filter2 == '"+filter2+"'";
    }
    if(filter3 != null){
    filter = filter+"filter3 == "+filter3;
    }
    query.setFIlter(filter);
    List<Result> results = query.excute();
    return results;
    }                  

1 Ответ

0 голосов
/ 01 июля 2018

У вас есть два варианта - вы можете использовать JPA Criteria Builder или JPA Технические характеристики

class Person {
  String firstName;
  String lastName;
  int age;
}

JPA Criteria Builder

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> query = builder.createQuery(Person.class);
Root<Person> root = query.from(Person.class);

Predicate sellAlcohol = builder.ge(root.get(Person_.age), 21);
Predicate toMindy = builder.equal(root.get(Person_.firstName), "Mindy");

Usage

query.where(builder.and(sellAlcohol, toMindy));
em.createQuery(query.select(root)).getResultList();

Specificatons

public PersonSpecifications {

  public static Specification<Person> sellAlcohol() {
    return new Specification<Person> {
      public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
        return cb.ge(root.get(Person_.age), 21);
      }
    };
  }

  public static Specification<Person> toMindy() {
    return new Specification<Person> {
      public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
        return cb.equal(root.get(Person_.firstName), "Mindy");
      }
    };
  }
}

Использование

personRepository.findAll(where(sellAlcohol()).and(toMindy()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...