当前位置: 首页 > 知识库问答 >
问题:

通过多个可选参数筛选JPA存储库

祁嘉言
2023-03-14

是否有一种方法可以使用JParepository来完成这一任务,而不需要为每个Patamenter组合创建大量if/else语句?

共有1个答案

薛欣德
2023-03-14

JpaRepository接口还实现了QueryByExampleExecutor接口,该接口提供了使用按示例查询(QBE)技术获取数据的findAll方法。这种方法非常适用于您的场景,当实体有很多字段,并且您希望用户能够通过其中一些字段过滤实体时,这种方法实际上是理想的。

假设实体是Person并且您希望创建endpoint来获取属性等于指定属性的Person。这可以通过以下代码实现:

实体类:

@Entity
public class Person implements Serializable {
    private Long id;
    private String firstName;
    private String lastName;
    private Integer age;
    private String city;
    private String state;
    private String zipCode;
}
@Controller
public class PersonController {
    private PersonService service;
    private PersonController(PersonService service) {
        this.service = service;
    }

    @GetMapping
    public List<Person> getMatchingPersons(@RequestBody Person personFilter) {
        return service.findMatchingPersons(personFilter);
    }
}
@Service
public class PersonService {
    private PersonRepository repository;
    private PersonService(PersonRepository repository) {
        this.repository = repository;
    }

    public List<Person> getMatchingPersons(Person personFilter) {
        return repository.findAll(Example.of(personFilter));
    }
}
@Repository
public class PersonRepository implements JpaRepository<Person, Long> {
}
 类似资料:
  • 所以我有表注释和作者。我想用许多可选参数构建复杂的搜索栏。我想用可选的作者名字/姓氏和一些标志来过滤评论,比如人气(基于评论评级)。 由于我不知道如何使用spring数据jpa存储库编写它,我一直在考虑使用@query注释将其编写为本机查询,像这样的smth应该可以工作 是否有使用Spring data jpa编写它的选项? 例如,将来我计划添加更多参数和分页。使用Spring就像使用sql查询1

  • 问题内容: 我有一个表单,用户可以指定各种参数来挖掘某些数据(状态,日期等)。 我可以产生一个查询: 等等。每一个都是可选的(我可以选择带有的所有行,或者带有的所有行,或者带有etc的所有行)。 给定大量参数(全部为可选参数),组成动态存储过程的最佳方法是什么? 我正在处理各种数据库,例如:MySQL,Oracle和SQLServer。 问题答案: 实现此目的的最简单方法之一: 等等。这完全消除了

  • 问题内容: 我想为一组SQL查询创建一个过滤器,以便用户最多可以通过三个值过滤SQL SELECT。用户界面具有三个文本框,每个文本框都将绑定到SQL表中的列名。用户可以通过这些文本框提供一个,两个或三个条件。 到目前为止,这就是我所拥有的。我知道这些声明将不起作用,但是我找不到解决该问题的方法。(使用不会返回任何结果。 问题答案: 如果我正确遵循,您想根据所有填充变量过滤结果,以处理未填充变量,

  • 我有一个审计日志实体,在这个实体中,我有一个映射到另一个拥有字段审计类型的实体。我想使用JPA存储库实现后端过滤。我想通过REST GET方法返回包含传递给query param的AuditActionType的所有AuditLog<代码>审核操作类型是:、、、、 例子: http://localhost:8086/audit/action?action=lo 应返回其审核操作包含“lo”的所有审

  • 问题内容: 我正在编写一些更新表的代码。根据用户想要执行的操作,它会更新大量的记录,也可能更新较小的记录。描绘因素是组ID。 用户可以选择是更新所有记录的表,还是仅更新具有该groupID的记录。我想对两个实例都使用相同的存储过程,也许在其中有一点逻辑来区分场景。(我不想使用90%相同的代码编写两个存储的proc。) 我不是存储过程的专家,也不知道是否可以传入可选参数,或者如何根据groupID是

  • 因此,为了提供搜索功能,我可以进行多个连接。我开始使用带有@query表示法的JPQL,但我必须对每个参数进行检查,结果一团糟。我开始研究其他选项,我看到了关于QueryDSL、标准和规范的东西,但我不确定我应该关注和学习哪一个。不幸的是,我不知道很多关于这个主题,我希望有人能指出我在正确的方向,以一个很好的实现这个搜索。谢谢!