如何使用CrudRepository与参数的变化?

时间:2017-08-03 11:54:54

标签: java spring spring-data-jpa jpql

我想展示一张人的表。用户应该能够通过大多数可选的属性发送查询和过滤。

问题:对于要过滤的每个属性,我必须使用`CrudRepository在spring-data-jpa中引入另一个方法:

public interface PersonRepository extends CrudRepository<Person, Long> {
    List<Person> findByFirstname(firstname);
    List<Person> findbyFirstnameAndLastname(first, last);
    List<Person> findByFirstnameAndLastnameAndAge(first, last, age);
    List<Person> findByFirstnameAndLastnameAndAgeAndCity(first, last, age, city);
}

问题:我怎样才能做得更好(无需写原生文字 PreparedStatement我自己)?

4 个答案:

答案 0 :(得分:1)

Query by example允许通过将简单的过滤器标准填充到&#34;示例&#34;来创建过滤器。实体:

public interface PersonRepository extends CrudRepository<Person, Long> {
    <S extends T> Iterable<S> findAll(Example<S> example);
}

...

Person person = new Person();
person.setFirstname("Dave");
person.setCity("Seattle");
Iterable<Person> davesFromSeattle = personRepository.findAll(Example.of(person));

答案 1 :(得分:0)

您使用分页和流查询电池结果集要求实体

答案 2 :(得分:0)

您只需在实体上设置所需的属性并将其传递给方法findAll (Entity entity)

例如,如果您希望员工具有某些属性值,则在其上设置该参数并传递给查询数据库。

Employee employee = new Employee ();
employee. setAge (35);
employee. setExperience(5);

现在将其传递给查询

List <Employee> employèes = do. findAll (Employee);

答案 3 :(得分:-1)

您可以使用HashMap。之后将使用键和值来构建Statement。或者您可以使用Builder模式。您可以使用它来构建动态查询。