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();
             }
 
         };
         }

猜你喜欢

转载自y60024651.iteye.com/blog/2309892
今日推荐