gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:23:05 31 4
gpt4 key购买 nike

我正在用 Spring Boot 构建一个休息服务。我一直在使用 Spring Data JPA 进行查询,但我愿意接受任何有助于解决我的问题的方法。

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

类似的东西,FindAllBy(all 20 columns)(String parameter)SELECT * FROM AllColumns() WHERE parameter = "Foo";
我有一个接近 20 个属性的实体,所以我想避免在搜索中写入所有列名。

我怎么能这样做?

最佳答案

这个 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;
}
}

最后,您可以通过扩展 JpaSpecificationExecuto 来修改您的存储库r
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"));

Then you need to execute query like


List<MyEntity> results = 
repository.findAll(Specification.where(spec1).or(spec2).or(spec3));

关于spring - 使用 Spring JPA 搜索匹配关键字的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58691666/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com