spring-data-jpa带括号的复杂查询写法

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lovme_du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值