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

使用Spring JPA搜索匹配关键字的所有列

西门建安
2023-03-14

我和Spring Boot一起建立了一个Rest服务。我一直使用Spring Data JPA进行查询,但我愿意接受任何有助于解决我的问题的东西。

我想在任何列中查找数据库中具有匹配字符串的所有条目。

类似于以下内容:“查找全部”(所有 20 列)(字符串参数)“从所有列中选择 *”,其中参数 = “Foo”;

我有一个拥有近20个属性的实体,因此我希望避免在搜索中写入所有列名称。

我怎么能这样做?

共有2个答案

蓝昊然
2023-03-14

是在所有列中搜索字符串的唯一方法SELECT * FROM yourTable其中field 1 LIKE“% value %”或field 2 LIKE“% value %”......;

李洋
2023-03-14

此URL(https://www.baeldung.com/rest-api-search-language-spring-data-specifications)会帮助你的,我已经从URL复制了一些代码来解释你。

您需要定义一个条件类

public class SearchCriteria {
    private String column;
    private String operation;
    private Object value;
}

然后,您需要定义您的搜索规范

public class SearchSpecification implements Specification<MyEntity> {

    private SearchCriteria criteria;

    private SearchSpecification(SearchCriteria criteria){
        this.criteria =criteria;
    }

    @Override
    public Predicate toPredicate
      (Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {


        if (criteria.getOperation().equalsIgnoreCase(":")) {
            if (root.get(criteria.getColumn()).getJavaType() == String.class) {
                return builder.like(
                  root.<String>get(criteria.getColumn()), "%" + criteria.getValue() + "%");
            } 
        }
        return null;
    }
}

最后,您可以通过扩展 Jpa 指定专家来修改存储库

public interface MyRepository 
  extends JpaRepository<User, Long>, JpaSpecificationExecutor<MyEntity> {}

现在,您可以为您的案例创建每个列的规范,所有二十列

SearchSpecification spec1 = 
              new SearchSpecification(new SearchCriteria("column1", ":", "searchVal"));

SearchSpecification spec2 = 
              new SearchSpecification(new SearchCriteria("column2", ":", "searchVal"));

SearchSpecification spec3 = 
              new SearchSpecification(new SearchCriteria("column3", ":", "searchVal"));

然后,您需要执行如下查询

List<MyEntity> results = 
      repository.findAll(Specification.where(spec1).or(spec2).or(spec3));
 类似资料:
  • 我已经完成了名称索引。它包含椅子、椅子等数据。 当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。 下面是我的代码: 搜索请求: 搜索响应: } 映射: 我该怎么解决这个问题? 谢谢,Sri

  • 本文向大家介绍js实现搜索框关键字智能匹配代码,包括了js实现搜索框关键字智能匹配代码的使用技巧和注意事项,需要的朋友参考一下 只要使用搜索引擎的朋友应该都有这样的体会,就是当在搜索框输入关键字的时候,会出现自能匹配现象,这绝对是非常好的用户体验,下面就是一段类似的代码,当然这里只是掩饰,所以只能匹配的数据都是本地固定好的,在实际应用中可以才能够数据库读取数据。 效果图: 代码实例如下: 更多关于

  • 本文向大家介绍Ajax实现模拟关键字智能匹配搜索效果,包括了Ajax实现模拟关键字智能匹配搜索效果的使用技巧和注意事项,需要的朋友参考一下 准备数据keyword.json:(这里只贴出部分数据) html结构 js: 效果图: 以上所述是小编给大家介绍的Ajax实现模拟关键字智能匹配搜索效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站

  • 本文向大家介绍基于jQuery实现搜索关键字自动匹配功能,包括了基于jQuery实现搜索关键字自动匹配功能的使用技巧和注意事项,需要的朋友参考一下 今天我们就一起来看一个简单的基于jquery的关键字自动匹配的例子,希望文章能够对各位有帮助。 例子一 在项目中,有时候需要用户选择城市,但是城市太多,用户选择起来不太方便,所以提供了一个用户可以通过输入框输入城市的汉字或者拼音简写。结果示意图如下:

  • 本文向大家介绍Jquery插件仿百度搜索关键字自动匹配功能,包括了Jquery插件仿百度搜索关键字自动匹配功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Jquery搜索关键字自动匹配功能的实现代码,供大家参考,具体内容如下 jQuery AutoComplete 是一个基于jQuery实现搜索关键字自动匹配提示的插件,该插件可扩展性强,表现性能优越,方便整合到自己的项目中使用;

  • 问题内容: 我的数据库中有三个表: 这些表中的每个表都有两个字段,分别称为“内容”和“标题”。我希望能够在我的sql语句中使用“赞”来查看“ messages.content”,“ messages.title”,“ topics.content”,“ topics.title”,“ comments.content”和“ comments”。标题”使用关键字。 到目前为止,我的查询仅能从一张表中