在spring data 使用中
接口:
/**
* 图联币管理:通过批次号,发放时间,截止时间,查询图联币发放情况。
* @author: LJ
* @Create at: 2011-11-1
* @param couponIssueBatchNum
* @param issueStartTime
* @param issueEndTime
* @param stopStartTime
* @param stopEndTime
* @return
*/
public List<CouponIssue> queryByMutiCondition(String couponIssueBatchNum,
Date issueStartTime, Date issueEndTime, Date stopStartTime,
Date stopEndTime);
实现:
@PersistenceContext
private EntityManager em;
@Override
public List<CouponIssue> queryByMutiCondition(String couponIssueBatchNum,
Date issueStartTime, Date issueEndTime, Date stopStartTime,
Date stopEndTime) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<CouponIssue> query = builder
.createQuery(CouponIssue.class);
Root<CouponIssue> couponIssue = query.from(CouponIssue.class);
query.select(couponIssue);
List<Predicate> predicateList = new ArrayList<Predicate>();
Predicate couponIssueBatchNumPredicate;
// 处理批次号不为空的条件,则表示用户通过批次号查询。
if ((couponIssueBatchNum != null) && (!(couponIssueBatchNum.isEmpty()))) {
couponIssueBatchNumPredicate = builder
.equal(couponIssue.get("couponIssueBatchNum"),
couponIssueBatchNum);
// builder.between(v, x, y)
predicateList.add(couponIssueBatchNumPredicate);
}
// 发放时间处理
Predicate issueDate;
// 因为CriteriaBuilder 的比较函数传递的是expression 所以把时间构造成date类型的表达式
// 表进行传递
Expression<Date> issueStart = builder.literal(issueStartTime);
Expression<Date> issueEnd = builder.literal(issueEndTime);
//Expression<String> issueString = couponIssue.get("issueDate"); 2011-11-03 18:00:56
//couponIssue.get("issueDate");
// 传递的时间进行转换
EntityType<CouponIssue> ci_ = couponIssue.getModel();
if (issueStartTime != null && issueEndTime != null) {
issueDate = builder
.between(couponIssue.get(ci_.getSingularAttribute("issueDate", Date.class)), issueStart, issueEnd);
predicateList.add(issueDate);
}
Predicate[] predicates = new Predicate[predicateList.size()];
predicateList.toArray(predicates);
query.where(predicates);
return em.createQuery(query).getResultList();
}
多条件分页查询
在springdata 中分页采用是返回 Page<T> 的方式:
如例子
// 接口实现 获取图联币的列表。
@Override
public Page<CouponIssue> queryByMutiCondition(String couponIssueBatchNum,
Date issueStartTime, Date issueEndTime, Date stopStartTime,
Date stopEndTime, Pageable pageable) {
Specification<CouponIssue> spec = CouponIssueSpecs
.queryByMutiCondition(couponIssueBatchNum, issueStartTime,
issueEndTime, stopStartTime, stopEndTime) ;
return couponIssueRepository.findAll(spec, pageable);
}
方法调用:
// queryByMutiCondition
public static Specification<CouponIssue> queryByMutiCondition(
String couponIssueBatchNum, Date issueStartTime, Date issueEndTime,
Date stopStartTime, Date stopEndTime) {
final String cibn = couponIssueBatchNum;
final Date ist = issueStartTime;
final Date iet = issueEndTime;
final Date sst = stopStartTime;
final Date set = stopEndTime;
return new Specification<CouponIssue>() {
@Override
public Predicate toPredicate(Root<CouponIssue> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate pc = null;
Root<CouponIssue> couponIssue = query.from(CouponIssue.class);
EntityType<CouponIssue> ci_ = couponIssue.getModel();
// query.select(couponIssue);
// 存放多个条件
List<Predicate> predicateList = new ArrayList<Predicate>();
Predicate couponIssueBatchNumPredicate;
// 处理批次号不为空的条件,则表示用户通过批次号查询。
if ((cibn != null) && (!(cibn.isEmpty()))) {
couponIssueBatchNumPredicate = cb.equal(
couponIssue.get("couponIssueBatchNum"), cibn);
// builder.between(v, x, y)
predicateList.add(couponIssueBatchNumPredicate);
}
// 发放时间处理
Predicate issueDate;
if (ist != null && iet != null) {
Expression<Date> issueStart = cb.literal(ist);
Expression<Date> issueEnd = cb.literal(iet);
issueDate = cb.between(couponIssue.get(ci_
.getSingularAttribute("issueDate", Date.class)),
issueStart, issueEnd);
predicateList.add(issueDate);
}
// 截止时间处理
Predicate stopDate;
if (sst != null && set != null) {
Expression<Date> stopStart = cb.literal(sst);
Expression<Date> stopEnd = cb.literal(set);
stopDate = cb.between(
couponIssue.get(ci_.getSingularAttribute(
"stopIssueDate", Date.class)), stopStart,
stopEnd);
predicateList.add(stopDate);
}
// 公共
Predicate[] predicates = new Predicate[predicateList.size()];
predicateList.toArray(predicates);
CriteriaQuery<?> cqy = query.where(predicates);
//Selection<?> selectionList = cqy.getSelection();
pc = cqy.getGroupRestriction();
return pc;
}
};
}
相关推荐
spingboot后端完整代码,利用spring data jpa 实现数据基本的增删改查,以及分页动态条件查询
springboot结合jpa实现分页,动态多条件查询,使用thymeleaf前端渲染数据
仅当您计划使用日志记录时才需要 SLF4J,还请下载 SLF4J 绑定,它将 SLF4J API 与您选择的日志记录实现链接起来。 请参阅 了解更多信息。 安装 mvn 全新安装 快速开始 git 克隆 cd azure-spring-data-cosmos-java-...
spring data jpa 的Specifications动态查询 单条件查询 多条件查询 分页查询
如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。具体实例代码大家参考下本文吧
SpringDataJpa开发--继承JpaRepository实现简单条件查询示例代码
Spring-Boot-Neo4j-RelationSpring-Boot 集成 Neo4j图形数据库实现关系的构建与查询博客地址:
项目的主要目标是使构建使用数据访问技术的Spring支持的应用程序变得更加容易。 此模块处理对基于的数据访问层的增强支持。 产品特点 JPA实体的CRUD方法的Ebean实现 根据查询方法名称和注释动态生成查询 支持查询...
Spring-Data-BusinessKey 只是一个通过注释提供一些“CUSTOM-ID”的小型库。 添加依赖: ... <groupId>org.zalando.spring <artifactId>spring-data-jpa-businesskey ${version} .... 如何使用 去做 执照 ...
本文是介绍Spring-data-jpa的PPT的学习笔记,整理...JPA API 条件查询 (子查询,多表连接查询) JPA结合QueryDSL轻松完成复杂查询(自连接,多表连接查询) 参与文档: Pro JPA2中文版:精通Java持久化API 优秀博文读书笔记: ...
Spring Data Spring Integration Spring Batch Spring Security Spring HATEOAS Spring Social Spring AMQP Spring Mobile Spring for Android Spring Web Flow ...
spring-data-demo 一个spring data 的入门demo练习 连接myspl对数据库实现基本的CRUD以及查询结果的排序及根据条件查询后对结果进行排序等操作的demo
ejpa-spring-boot-starter 这是一个基于SpringDataJPA的项目,从...多字段复杂条件的查询 如何引入使用使用 1.引入依赖: <ejpa>2.0.0 <groupId>vip.efactory <artifactId>ejpa-spring-boot-starter</artifactId>
本篇文章主要介绍了Spring Data JPA动态条件查询的写法 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
春天-redis-websocket使用Spring Boot WebFlux和Redis Pub / Sub的多实例React式聊天应用程序可扩展的Java 11 Spring Boot WebFlux聊天应用程序,用于演示如何使用Reactive 使用Reactive Redis ,而无需使用任何外部...
jpa-spec 在Spring Data JPA之上做扩展,支持原生JPA2规范,极大的简化动态查询语法。特性兼容JPA2规范Equal/NotEqual/Like/In 支持多个参数, Equal/NotEqual 支持Null 值.构建器风格创建查询条件支持分页与构建器...
此示例应用程序展示了如何使用Spring Boot 2.2,Spring Data,Angular 8和Angular Material构建基本的CRUD应用程序。 请阅读 看看这个应用程序是如何创建的。 先决条件: 和 具有身份验证和用户管理API,可通过...
多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果,这里介绍第二种方式,小编觉得挺不错的,现在分享给大家,也给大家做个...
比如:当有一个UserDao.findUserById()这样一个方法声明,大致应该能判断出这是根据给定条件的ID查询出满足条件的User对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的...
Spring Security,Spring Boot,Spring Data JPA,HSQL,JSP的注册和登录示例 指南 先决条件 JDK 1.7或更高版本 Maven 3或更高版本 ...Spring Data JPA Maven JSP HSQL 跑 mvn clean spring-boot:run