`

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

相关推荐

    JPA分页查询与条件分页查询

    总的来说,JPA分页查询和条件分页查询为开发者带来了极大的便利,它减少了对SQL的直接操作,提高了代码的可读性和可维护性。通过合理地运用Spring Data JPA的特性,可以构建出高效、灵活的数据库访问层。在设计和...

    spring data jpa分页查询示例代码

    Spring Data JPA 分页查询示例代码 Spring Data JPA 是一个基于 Java Persistence API(JPA)的数据访问技术,提供了一个简洁的方式来访问关系数据库。分页查询是数据库查询中的一种常见操作,Spring Data JPA 提供...

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

    SpringBoot Jpa分页查询配置方式解析 在本文中,我们将详细介绍 SpringBoot Jpa 分页查询配置方式的解析,通过示例代码介绍了非常详细,对大家的学习或者工作具有一定的参考学习价值。 SpringBoot Jpa 分页查询...

    springboot加JPA增删改查分页示例

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

    基于springmvc实现分页查询

    在服务层,我们可以注入JpaRepository,并利用它的findAll(Pageable pageable)方法来执行分页查询。例如: ```java public interface UserRepository extends JpaRepository, Long&gt; { } // 在服务层 public ...

    jpa查询详解

    jpa查询详解 JPA(Java Persistence API)是一种 Java 持久层 API,用于处理 Java 对象和关系数据库之间的 Mapping。JPA 查询是 JPA 中的一种重要机制,用于从数据库中检索数据。在本文中,我们将详细介绍 JPA 查询...

    Spring Data Jpa实现分页和排序代码实例

    实际上,Spring Data Jpa对于分页以及排序的查询也有着完美的支持。下面,我们来学习如何通过Pageable来对数据库进行分页查询。 添加Maven依赖 首先,我们需要引入Jpa,数据库直接使用hsqldb内存数据库就可以了。...

    Java工作笔记-JPA中使用@query注解(分页查询实例)

    本篇工作笔记将深入探讨如何在JPA中使用@Query进行分页查询,并通过一个实例来展示其具体应用。 首先,我们需要了解分页查询的基本概念。在处理大量数据时,为了提高用户体验和性能,通常不会一次性加载所有记录,...

    springboot+jpa+thymeleaf实现增删改查分页查询

    总的来说,这个项目是一个典型的Spring Boot后端开发与Thymeleaf前端展示的示例,通过JPA实现了与数据库的交互,展示了如何在一个Web应用中实现基础的CRUD操作和分页查询,以及动态下拉框的实现,对于初学者来说是一...

    JQuery,ajax,hibernate+spring,分页查询.rar

    `Hibernate+Struts分页代码.mht`可能包含了使用Struts框架(另一种Java Web框架)与Hibernate进行分页查询的示例代码。Struts提供了Action和ActionForm等组件来处理用户请求,结合Hibernate可以实现数据的检索和展示...

    Spring Data JPA 复杂/多条件组合分页查询

    在Spring Data JPA中,实现复杂或多条件组合的分页查询是一项常见的任务,这有助于高效地检索和展示大量数据。Spring Data JPA通过提供便捷的API使得开发者可以轻松地处理数据库查询,包括分页和排序。下面将详细...

    jpa单表递归树形结构实现

    在本示例中,我们将探讨如何使用Spring JPA来实现单表递归树形结构。 首先,我们需要理解递归树形结构。在数据库中,树形结构通常通过自关联来表示,即一个表的某个字段引用该表自身,形成一个层级关系。对于单表...

    springboot分页查询功能实现讲解

    为了更好地理解这两种方法,我们可以参考“SpringBoot分页查询功能的实现方法.png”这个图片文件,它可能展示了代码示例或者执行结果的对比。 在实际项目中,使用Spring Data JPA等框架实现分页查询更推荐,因为...

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

    使用Bootstrap4 + Vue2实现分页查询的示例代码 在这篇文章中,我们将讨论如何使用Bootstrap4和Vue2实现分页查询的示例代码。 Bootstrap4是一个流行的前端框架,提供了许多有用的UI组件来快速构建响应式布局,而Vue2...

    Hibernate中分页查询的封装。

    在实际项目中,我们还可以通过Spring Data JPA的Pageable接口或者MyBatis的PageHelper插件来更方便地实现分页查询。这些工具或框架提供了更高级的分页功能,例如排序、缓存等。 总的来说,Hibernate的分页查询封装...

    java实现分页示例代码共6页.pdf.zip

    这个"java实现分页示例代码共6页.pdf.zip"文件很可能包含了一个详细的教程或者示例代码,用于指导开发者如何在Java环境中实现分页功能。 首先,让我们了解分页的基本概念。分页通常涉及两个主要部分:前端展示和...

    Springboot整合Hibernate thymeleaf,添删改查,分页查询等,单元测试,亲测百分之白可运行

    总的来说,这个项目提供了完整的Spring Boot、Hibernate、JPA和Thymeleaf整合示例,涵盖了基础的Web开发功能,并且经过测试确保可运行,对于初学者来说是很好的学习资源。通过这个项目,开发者可以深入理解这些技术...

    Spring-data-jpa示例源码

    3. **Specifications**: Spring Data JPA 提供了 `Specification` 接口,用于构建复杂的动态查询。这使得在运行时可以根据需要构建灵活的查询条件,无需硬编码到 repository 方法中。 4. **JPA Entity Mapping**: ...

Global site tag (gtag.js) - Google Analytics