此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"));
然后您需要执行类似的查询
List<MyEntity> results =
repository.findAll(Specification.where(spec1).or(spec2).or(spec3));
,
是在所有列中搜索字符串的唯一方法
选择*从yourTable
在哪里field1喜欢'%value%'或field2喜欢'%value%'......;
本文链接:https://www.f2er.com/3167483.html