spring data JPA 中的多属性排序---养老院管理系统涉及技术整理

在此介绍我所用的一种方式:

第一步,引包

import org.springframework.data.domain.Sort;import org.springframework.data.domain.Sort.Order;

第二步,service方法代码

  @Override    public Page<TurnOverRecord> findAll(Integer pageNum, Integer pageSize, TurnOverRecord turnOverRecord) {//先按isTurnOver从小到大升序,再按turnOverTime升序        List< Order> orders=new ArrayList< Order>();        orders.add( new Order(Sort.Direction. ASC, "isTurnOver"));        orders.add( new Order(Sort.Direction. ASC, "turnOverTime"));        Pageable pageable= new PageRequest(pageNum - 1, pageSize, new Sort(orders));

Specification<TurnOverRecord> specification = new Specification<TurnOverRecord>() {            @Override            public Predicate toPredicate(Root<TurnOverRecord> root, CriteriaQuery<?> query, CriteriaBuilder cb) {                Predicate predicate = cb.conjunction();                //单属性排序//                query.orderBy(cb.asc(root.get("isTurnOver")));//                query.orderBy(cb.desc(root.get("id")));//                query.groupBy(root.get("id"));                query.distinct(true);                //判断是否有条件                predicate.getExpressions().add(cb.equal(root.get("flag"), 1));                if (turnOverRecord != null) {                    if (StringUtil.isNotNull(turnOverRecord.getMemberId())                            && StringUtil.isNotNullAndZero(turnOverRecord.getMemberId().getId())                            ) {                        predicate.getExpressions().add(cb.equal(root.get("memberId").get("id"), turnOverRecord.getMemberId().getId()));                    }                    if (StringUtil.isNotNull(turnOverRecord.getMemberId())                            && StringUtil.isNotNullAndBlank(turnOverRecord.getMemberId().getName())                            ) {                        predicate.getExpressions().add(cb.like(root.get("memberId").get("name"), "%"+turnOverRecord.getMemberId().getName().trim()+"%"));                    }                    if (StringUtil.isNotNull(turnOverRecord.getCreator())                            && StringUtil.isNotNullAndBlank(turnOverRecord.getCreator().getName())) {                        predicate.getExpressions().add(cb.like(root.get("creator").get("name"), "%"+turnOverRecord.getCreator().getName().trim() + "%"));                    }                }                return predicate;            }        };        return turnOverRecordDao.findAll(specification, pageable);    }
时间: 2024-11-05 23:34:55

spring data JPA 中的多属性排序---养老院管理系统涉及技术整理的相关文章

Spring data JPA中使用Specifications动态构建查询

有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类型安全,更加的面向对象.而在Spring data JPA中相应的接口是JpaSpecificationExecutor,这个接口基本是围绕着Specification接口来定义的. Specification接口中只定义了如下一个方法: Predicate toPredicate(Root<T>

使用Spring Data JPA进行数据分页与排序

一.导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好.所以处理较大数据查询结果展现的时候,分页查询是必不可少的.分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控制,导致用户可能在不同的页看到同一条数据.那么,本文的主要内容就是给大家介绍一下,如何使用Spring Data JPA进行分页与排序. 二.实体定义 我们使用一个简单的实体定义:Article(文章) @Data @AllArgsConstructor @NoArgsConstructor @Bu

Spring data jpa中Query和@Query分别返回map结果集

引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/details/51016234 http://www.cnblogs.com/zj0208/p/6008627.html Query的使用: 在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,

Spring Data JPA中踩过的坑

说老实话,Spring Data JPA很好用,上次使用还是2013年,当时只是完成Java Bean和数据库中表的映射. 最近想起来用Spring Data JPA的起因是手头有一个项目,源代码是用原生SQL+JDBC实现的,在第一次部署时要初始化数据库,还hardcode了很多数据库配置参数.正好最近有空,就打算用Spring Boot Data JPA(spring-boot-starter-data-jpa)改造一下,仔细看了一下源代码发现和几年前已经天差地别,如果你的业务逻辑不是特别复

Spring Data JPA 中使用Update Query更新实体类问题

在jpa中使用@Modifying 虽然事务已经能够更新,但是在循环更新的时候,执行modify语句后的查询的实体仍然是没有更新的. 执行完modifying query, EntityManager可能会包含过时的数据,因为EntityManager不会自动清除实体.只有添加clearAutomatically属性,EntityManager才会自动清除实体对象. @Modifying(clearAutomatically = true)

Spring Data JPA中的mappedBy

mappedBy单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中一对多的关系,关联关系总是被多方维护的即外键建在多方,我们在单方对象的@OneToMany(mappedBy="xxx") mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中一对多的关系,关联关系总是被多方维护的即外键建在多方,我们在单方对象的@OneToMany(mappedby="xxx ") 把关系的维护交给多方对象的属性去维

【spring data jpa】spring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串

示例代码: /** * 如果barCode字段值为null则不处理 * 如果barCode字段值不为null则在原本值的前面拼接 del: * @param dealer * @return */ @Modifying @Transactional @Query("update Dealer d set " + " d.deleteFlag = 1 ," + " d.barCode = CASE WHEN d.barCode IS NULL THEN d.

【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application.properties与 Chapter1 相同 实体类映射数据库表 user 实体类 @Entity public class User implements Serializable { private static final long serialVersionUID = -39076354

Spring Boot中使用Spring Data JPA示例

JPA是Java Persistence API的简称,是sun公司早期推出的Java持久层规范,目前实现JPA规范的主流框架有Hibernate.OpenJPA等.Hibernate框架是当前较为流行的JPA实现之一,在Spring Data JPA中,默认底层实现也是使用的Hibernate. Spring Data JPA示例搭建 Spring Boot 提供了一个"spring-boot-starter-data-jpa"模块,在项目中使用这个模块,就可以简单的整合Spring