【JPA CriteriaBuilder 如何使用关键字“in“】

JPA CriteriaBuilder 如何使用关键字"in"

ps:修改公司的老项目,突然要用到这个知识点,但是自己查到的这方面的文章太少了,就自己总结了一份,亲测正确!

@Override
    public Page<UserInfoDTO> UserListByConditions(QueryInfoDTO queryInfoDTO, Integer page, Integer limit) {
        Pageable pageable = PageRequest.of(page - 1, limit, Sort.Direction.DESC,"showOrder");
        Specification<UserInfo> spec = new Specification<UserInfo>() {
            @Override
            public Predicate toPredicate(Root<UserInfo> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if (StringUtils.isNotBlank(queryInfoDTO.getUserId())){ 
                   //root.get("channelId")表示获取channelId这个字段名称
                   list.add(criteriaBuilder.equal(root.get("UserId").as(String.class), queryInfoDTO.getUserId()));
                   }
                 if (StringUtils.isNotBlank(queryInfoDTO.getUserName())){ 
                      //like表示执行like查询,%...%表示值
                      list.add(criteriaBuilder.like(root.get("UserlName").as(String.class), "%" + queryInfoDTO.getContent() + "%"));
           
                    }

                List<String> userIds = new ArrayList<>();
                userIds.add(",1,");
                userIds.add(",2,");
                userIds.add(",3,");
                userIds.add(",4,");
                list.add(criteriaBuilder.in(root.get("userId")).value(userIds ));
                Predicate[] p = new Predicate[list.size()];
                //将多个查询条件联合起来之后,返回Predicate对象
                return criteriaBuilder.and(list.toArray(p));
            }
        };
        Page<UserInfo> entitys = userInfoRepository.findAll(spec, pageable);
        Page<UserInfoDTO> dtos = new PageImpl<>(convertUserInfoEntityToDTOs(entitys.getContent()), pageable, entitys.getTotalElements() );
        return dtos;
    }

重点关注

list.add(criteriaBuilder.in(root.get(“userId”)).value(userIds ));
如果用到in,value()的参数必须是集合。
题。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值