【问题标题】:How to use CrudRepository with variations of parameters?如何使用带有各种参数的 CrudRepository?
【发布时间】:2018-01-11 00:20:39
【问题描述】:

我想显示一张人员表。用户应该能够发送查询并按大多数可选的属性进行过滤。

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

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);
}

问题:我怎样才能做得更好(不必写原生 PreparedStatements 我自己)?

【问题讨论】:

标签: java spring spring-data-jpa jpql


【解决方案1】:

Query by example 允许通过将简单的过滤条件填充到“示例”实体中来创建过滤器:

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));

【讨论】:

【解决方案2】:

您对连击结果集需求实体使用分页和流查询

【讨论】:

    【解决方案3】:

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

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

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

    现在传递给查询

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

    【讨论】:

    • 这真的有效吗?通过@Entity bean 搜索?
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2021-01-20
    • 2019-09-02
    • 2017-02-01
    • 1970-01-01
    • 2017-07-17
    • 2021-08-11
    相关资源
    最近更新 更多