JPA 对应一个字段的 多状态查询

JPA 查询条件动态拼装 一个字段对应多个状态查寻 SQL


@Override
@Transactional(readOnly = true)
public Results<Invoice> list(final Integer cid, final Integer uid, final String snno, final String inno, final List<Integer> status, final Integer flag, final Integer isshow,final String dtStart, final String dtEnd, final Integer cur, final Integer page) {
    Pageable pageable = PageRequest.of(cur, page, Sort.Direction.DESC, "id");
    Page<Invoice> lst = invoiceRepository.findAll(new Specification<Invoice>() {
        @Override
        public Predicate toPredicate(Root<Invoice> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            List<Predicate> list = new ArrayList<Predicate>();
            if (VerificationUtil.notZero(cid)) {
                list.add(cb.equal(root.get("cid").as(Integer.class), cid));
            }
            if (VerificationUtil.notZero(uid)) {
                list.add(cb.equal(root.get("uid").as(Integer.class), uid));
            }
            if (StringUtils.notEmpty(snno)) {
                list.add(cb.like(root.get("snno").as(String.class), "%" + snno + "%"));
            }
            if (StringUtils.notEmpty(inno)) {
                list.add(cb.like(root.get("inno").as(String.class), "%" + inno + "%"));
            }
            if (flag != null) {
                list.add(cb.equal(root.get("flag").as(Integer.class), flag));
            }
            if (isshow != null) {
                list.add(cb.equal(root.get("isshow").as(Integer.class), isshow));
            }
            if (StringUtils.notEmpty(dtStart)) {
                java.util.Date curDate = TimeUtil.getDate(dtStart, null);//new java.util.Date();
                Date date = new Date(curDate.getTime());//进行日期的转换
                list.add(cb.greaterThanOrEqualTo(root.<Date>get("ft"), date));
            }
            if (StringUtils.notEmpty(dtEnd)) {

                java.util.Date curDate = TimeUtil.getDate(dtEnd, null);//new java.util.Date();
                Date date = new Date(curDate.getTime());//进行日期的转换

                list.add(cb.lessThanOrEqualTo(root.<Date>get("ft"), date));
            }
            Predicate[] p = new Predicate[list.size()];

          Predicate pAnd = cb.and(list.toArray(p));

            List<Predicate> _list = new ArrayList<Predicate>();
            if (status != null && !status.isEmpty()) {
                for(Integer s : status){
                    _list.add(cb.equal(root.get("status").as(Integer.class), s));
                }
            }
            Predicate[] pp = new Predicate[_list.size()];
            Predicate pOr = cb.or(_list.toArray(pp));

            return query.where(pAnd, pOr).getRestriction();
        }
    }, pageable);
    return new Results<>(lst.getContent(), lst.getSize(), lst.getTotalElements(), lst.getNumber(), lst.getTotalPages());
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java之眼

创作不易,一起努力

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

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

打赏作者

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

抵扣说明:

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

余额充值