jpa 动态分页查询示例

动态拼接查询条件
     private  Specification<InfoPushBasic> getWhereClause( final  InfoPushSearch infoPushBasicSearch){
         return  new  Specification<InfoPushBasic>() {
             @Override
             public  Predicate toPredicate(Root<InfoPushBasic> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                 root = query.from(InfoPushBasic. class );
 
                 List<Predicate> predicate =  new  ArrayList<>();
                 String infoType = infoPushBasicSearch.getInfoType();
                 String pushWay = infoPushBasicSearch.getPushWay();
 
                 predicate.add(cb.equal(root.get( "createrId" ), infoPushBasicSearch.getUserId()));
                 
                 if (infoType!= null ){
                     In<Object> in = cb.in(root.get( "infoTypeCode" ));
                     String[] infoTypeArray = infoType.split( "," );
                     for  (Serializable infoTypeCode : infoTypeArray) {
                         in.value(infoTypeCode);
                     }
                     predicate.add(in);
 
                 }
                 if (pushWay!= null ){
                     Join<InfoPushBasic,PushWayBasic> pushWayJoin = root.join(root.getModel().getSingularAttribute( "pushWayBasic" ,PushWayBasic. class ),JoinType.LEFT);
                     String[] pushWayArray = pushWay.split( "," );
                     Predicate orPre = cb.equal(root.get( "createrId" ),  "createrId" );
                     for  (String pushWayCode : pushWayArray) {
                         orPre = cb.or(orPre, cb.like(pushWayJoin.get( "pushWayCode" ).as(String. class ), "%"  + pushWayCode +  "%" ));
                     }                    
                     predicate.add(orPre);
                 }
                 if  (infoPushBasicSearch.getChannelState()!= null ){
                     predicate.add(cb.equal(root.get( "channelState" ).as(String. class ), infoPushBasicSearch.getChannelState()));
                 }
                 if (infoPushBasicSearch.getPushPeriodBegin()!= null ){
                     predicate.add(cb.greaterThanOrEqualTo(root.get( "pushPeriodBegin" ).as(Date. class ), infoPushBasicSearch.getPushPeriodBegin()));
                 }
                 if (infoPushBasicSearch.getPushPeriodEnd()!= null ){
                     predicate.add(cb.lessThanOrEqualTo(root.get( "pushPeriodEnd" ).as(Date. class ), infoPushBasicSearch.getPushPeriodEnd()));
                 }
                 
                 Predicate[] pre =  new  Predicate[predicate.size()];
                 return  query.where(predicate.toArray(pre)).getRestriction();
             }
 
         };
         }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值