spring-data-jpa
的MAVEN依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
最后要得到查询效果:
SELECT
*
FROM
sys_dictionary sysdiction0_
WHERE
(
sysdiction0_.id =?
OR sysdiction0_.type LIKE ?
)
AND keyValue = ?
使用spring-data-jpa
构建的代码如下:
@Override
public List<SysDictionary> create(DictionaryParam param) {
Collection<SearchFilter> filters = new ArrayList<>();
filters.add(new SearchFilter("keyValue",Operator.EQ,param.getName()));
List<SysDictionary> list= dictionaryDAO.findAll(new Specification<SysDictionary>() {
@Override
public Predicate toPredicate(Root<SysDictionary> root,
CriteriaQuery<?> query, CriteriaBuilder builder) {
//转化
List<Predicate> orPredicates = Lists.newArrayList();
Predicate p1 = builder.equal(root.get("id"), param.getId());
orPredicates.add(builder.or(p1));
Predicate p2 = builder.like((Path) root.get("type"), "%," + param.getType() + ",%");
orPredicates.add(builder.or(p2));
//以下是spring side3提供的方法
Predicate o = DynamicSpecifications.bySearchFilter(
SysDictionary.class, filters)
.toPredicate(root, query, builder);
Predicate p = builder.or(orPredicates.toArray(new Predicate[orPredicates.size()]));
query.where(p, o);
return null;
}
});
return list;
}
END