Complex queries written spring-data-jpa parentheses

spring-data-jpaThe MAVEN dependencies:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

Finally, to get the query results:

SELECT
	*
FROM
	sys_dictionary sysdiction0_
WHERE
	(
		sysdiction0_.id =?
		OR sysdiction0_.type LIKE ?
	)
      AND keyValue = ?

Using spring-data-jpathe code constructed as follows:

 @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

Published 22 original articles · won praise 9 · views 7664

Guess you like

Origin blog.csdn.net/qq_35719898/article/details/103630769