`

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();
            }
 
        };
        }
分享到:
评论

相关推荐

    spring data jpa分页查询示例代码

    本篇文章主要介绍了spring data jpa分页查询示例代码,分页在很多项目中都能使用,具有一定的参考价值,有兴趣的可以了解一下。

    Spring Data JPA带条件分页查询实现原理

    主要介绍了Spring Data JPA带条件分页查询实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    springboot加JPA增删改查分页示例

    springboot+JPA简单的示例,代码有注释。带有mysql的sql语句,编写环境是java8, ide是IDEA,连接数据库的连接需要修改,需要安装lombok插件,以免写set和get方法。代码中有分页查询等示例。

    SpringBoot Jpa分页查询配置方式解析

    主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring Data JPA分页复合查询原理解析

    主要介绍了Spring Data JPA分页复合查询原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例

    本文介绍了Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Spring Data JPA.rar

    使用Spring Boot 2.1.6轻松实现JPA操作MySQL数据库的CRUD,以及分页和排序功能。在Spring Boot 2.x版本中可以非常轻松、快速搞定持久层的开发动作,配置比SpringBoot+MyBatis还少,偶觉得它除了执行效果不如...

    使用Bootstrap4 + Vue2实现分页查询的示例代码

    如何使用Bootstrap+Vue来实现动态table,数据的新增删除等操作,请查看使用Bootstrap + Vue.js实现表格的动态展示、新增和删除 。交代完毕,本文主题开始。 一、使用Bootstrap搭建表格 表格区 &lt;div class

    SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例

    本篇文章主要介绍了SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    SpringDataJpa的jar包.rar

    Spring Data JPA 是Spring基于ORM框架、JPA规范封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的...下面的示例代码即可完成数据保存的操作,而无需具体实现类.

    easy-jpa:Java Persistence on Query By Example 【Lambda表达式使用】

    通过示例查询(QBE)的Java持久性API(JPA) 基于Spring Data JPA 版本 0.0.1 下一个版本 独特的支持 数学支持 特征 支持和/或逻辑运算 支持为(空/布尔/空) 支持等于/不等于/输入/不输入/赞/不赞 支持gt / ge / ...

    spring-boot-jpa-rest-demo-filter-paging-sorting:具有过滤器,分页和排序功能的Spring Boot Data JPA

    春天启动jpa休息演示过滤器分页排序使用Spring引导MVC的示例应用程序Spring Data JPA能够执行过滤,分页和排序。过滤REST API按照演示应用程序中的说明处理过滤器。 它将以下概念解析并转换为org.springframework....

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 457 11.2 执行查询 459 11.2.1 使用Query创建查询 459 11.2.2 设置查询参数 459 11.2.3 取得查询结果 460 11.3 JPQL语法 ...

    JAVA基础知识点HTML格式教程编程实例20000源代码

    非常适合初学者 基于HTML的结构化呈现,每个知识点均有代码示例!...命名查询、本地查询、一对多映射、一对一映射、开放JPA、分页结果集合 主关键词、查询参数、结果映射、保存、二级表、自联接 ... ... 太多知识点了

    超好用的jQuery分页插件jpaginate用法示例【附源码下载】

    本文实例讲述了jQuery分页插件jpaginate用法。分享给大家供大家参考,具体如下: jpaginate是一个自带滑动动画效果的jQuery分页插件,用户可以通过单击或只是悬停在箭头上的使页码滑动显示。 你可以用下面的方式调用...

    基于Java的微服务实践,单体微服务创建、Docker部署、Dubbo微服务实践等.zip

    spring-boot-mybatis Spring Boot集成MyBatis,分页插件PageHelper,通用Mapper,MyBatis的关联表查询 spring-boot-security Spring Boot基于Spring Security的安全管理 spring-boot-jersey Spring Boot集成Jersey ...

    poc-spring-boot

    JPA ---示例查询 JPA ---按过滤器查询(REST查询语言) RestTemplate自定义配置 配置属性样本 休息呼叫其他“服务”的测试解决方案,使用WireMock 如何自定义RestTemplate,添加公共标题,添加日志输出详细信息 ...

    spring-native-jpa-blocking:演示项目使用带有Web阻止和JPA的spingboot本机beta

    本机JPA阻止示例这是一个示例,提供以下内容: GET /api/v1/person :查找所有具有分页和排序功能的人GET /api/v1/person/{id} :按ID查找人GET /api/v1/person/stream :SSE(服务器发送事件)流,通知每个人的事件...

    ngtable-java:显示带有 ngTable 的 Java REST 后端的示例项目

    作者:Martin Nuc 级别:中级技术:AngularJS、CDI、JPA、EJB、JPA、JAX-RS、ngTable 它是什么? 此示例基于 Pete Muir 为 JBoss 设计的带有 AngularJS 的快速启动项目,可在上找到,并进行了以下更改: 使用 ...

    querydsl-open:QueryDSL示例

    每个项目都设置数据,并利用来自各种过滤器,排序和分页的灵活搜索/查询功能。 每个项目都展示了一种持久性方法,探索了前面提到的技术。 看: querydsl-jpa:使用Spring MVC和Spring Boot开发的Java Web应用程序,...

Global site tag (gtag.js) - Google Analytics