【问题标题】:How to find all employees that contain all character sequenences in their name?如何查找名称中包含所有字符序列的所有员工?
【发布时间】:2020-10-01 10:24:57
【问题描述】:

我正在尝试编写一个 Micronaut Data JPA finder 来查找与字符串列表匹配的所有 employees

给定以下员工(名字,姓氏)

  • 约翰·多伊
  • 简·多伊
  • 彼得潘
  • 西尔维奥·旺勒
  • 弗兰卡·波坦特
  • 弗兰克·波特

假设用户使用 Silvio 之类的查询查询系统,那么结果应该是

  • 员工:Silvio Wangler

如果查询是Frank,结果应该是

  • 员工:弗兰卡·波坦特
  • 员工:弗兰克·波特

如果查询是frank pot,结果也应该是(不区分大小写)

  • 员工:弗兰卡·波坦特
  • 员工:弗兰克·波特

我设法为单个字符串编写了一个查找器,如下所示

Page<Employee> findAllByLastNameIlikeOrFirstNameIlike(
      String lastName, String firstName, Pageable pageable);

对于像 frank pot 这样的查询,我想将字符串标记/拆分为列表 ["frank", "pot"] 并且想知道我是否可以实现类似

Page<Employee> findAllByLastNameIlikeOrFirstNameIlike(
      List<String> lastName, List<String> firstName, Pageable pageable);

甚至更好地使用 JPA 的 Criteria API。您将如何实现这样的搜索器?你能给我指个方向吗?

【问题讨论】:

    标签: jpa micronaut micronaut-data


    【解决方案1】:

    我总是想到的第一件事就是如何用普通的 SQL 来做。 找到了一个MySQL Like multiple values

    所以我建议最好的方法是使用条件 API 并构建您自己的动态查询。 查看第一个示例 https://micronaut-projects.github.io/micronaut-data/latest/guide/#repositories,它为您提供了 micronaut 所需的一切。

    如果我有某种动态查询,例如“给我从头到尾的所有内容,但如果未指定开始,则在结束之前给我所有内容...”,我也会使用 ciriteria api

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 2022-09-28
      • 2022-01-19
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2018-08-10
      相关资源
      最近更新 更多