功能:Spring Data JPA中的动态查询 实现日期查询
页面对应的dto类
private String modifiedDate;
//实体类
@LastModifiedDate
protected Calendar modifiedDate;
1 public Predicate toPredicate(Root<Infolink> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
2 query.distinct(true);
3 List<Predicate> pl = new ArrayList<Predicate>();
4 Join<Infolink, Infosort> join = (Join<Infolink, Infosort>) root
5 .join(root.getModel().getList("infosorts", Infosort.class), JoinType.LEFT);
6 for (Map f : filters) {
7 String field = f.get("field").toString().trim();
8 String value = f.get("value").toString().trim();
9 if (value != null && value.length() > 0) {
10 if ("infosortId".equalsIgnoreCase(field)) {
11 pl.add(cb.equal(join.get("id"), value));
12 }
13 if ("infolinkTitle".equalsIgnoreCase(field)) {
14 pl.add(cb.like(root.<String>get(field), "%" + value + "%"));
15 }
16 if ("keyword".equalsIgnoreCase(field)) {
17 pl.add(cb.like(root.<String>get(field), "%" + value + "%"));
18 }
19 if ("summary".equalsIgnoreCase(field)) {
20 pl.add(cb.like(root.<String>get(field), "%" + value + "%"));
21 }
22 if ("user".equalsIgnoreCase(field)) {
23 pl.add(cb.equal(root.<String>get(field), value));
24 }
25 if ("infolinkType".equalsIgnoreCase(field)) {
26 pl.add(cb.equal(root.<String>get(field), value));
27 }
28 if ("infolinkState".equalsIgnoreCase(field)) {
29 pl.add(cb.equal(root.<String>get(field), value));
30 }
31 if ("id".equalsIgnoreCase(field)) {
32 pl.add(cb.equal(root.<String>get(field), value));
33 }
34 // 日期查询
35 if ("modifiedDate".equalsIgnoreCase(field)) {
36 // 处理时间
37 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
38 Date startDate;
39 Date endDate;
40 try {
41 startDate = format.parse(value);
42 } catch (ParseException e) {
43 startDate = new Date(946656000000L);// 2000 01 01
44 }
45 endDate = startDate;
46 Calendar calendar = Calendar.getInstance();
47 calendar.setTime(endDate);
48 calendar.add(Calendar.DATE, 1);
49 endDate = calendar.getTime();
50 calendar = null;
51 pl.add(cb.between(root.<Date>get(field), startDate, endDate));
52 }
53 }
54 }
55 pl.add(cb.equal(root.<Integer>get("flag"), 1));
56 return cb.and(pl.toArray(new Predicate[0]));
57 }
效果展示:
================================多条件查询=================================================
二 有多个条件,我们就可以创建一个Predicate集合,最后用CriteriaBuilder的and和or方法进行组合,得到最后的Predicate对象。
root参数是我们用来对应实体的信息的。criteriaBuilder可以制作查询信息。
CriteriaBuilder对象里有很多条件方法,比如制定条件:某条数据的创建日期小于今天。
criteriaBuilder.lessThan(root.get("createDate"), today) //该方法返回的对象类型是Predicate。正是toPredicate需要返回的值。
创建一个Predicate集合,最后用CriteriaBuilder的and和or方法进行组合,得到最后的Predicate对象。 //and到一起的话所有条件就是且关系,or就是或关系了。
public List<WeChatGzUserInfoEntity> findByCondition(Date minDate, Date maxDate, String nickname){
List<WeChatGzUserInfoEntity> resultList = null;
Specification querySpecifi = new Specification<WeChatGzUserInfoEntity>() {
@Override
public Predicate toPredicate(Root<WeChatGzUserInfoEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> predicates = new ArrayList<>();
if(null != minDate){
predicates.add(criteriaBuilder.greaterThan(root.get("subscribeTime"), minDate));
}
if(null != maxDate){
predicates.add(criteriaBuilder.lessThan(root.get("subscribeTime"), maxDate));
}
if(null != nickname){
predicates.add(criteriaBuilder.like(root.get("nickname"), "%"+nickname+"%"));
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
resultList = this.weChatGzUserInfoRepository.findAll(querySpecifi);
return resultList;
}
相关链接:
1. Spring Data JPA,一种动态条件查询的写法
www.cnblogs.com/derry9005/p/6282571.html
2. Spring data jpa 复杂动态查询方式总结
https://blog.csdn.net/qq_30054997/article/details/79420141
3. 带有条件的查询后分页和不带条件查询后分页实现
https://blog.csdn.net/lihuapiao/article/details/48782843
Spring Data JPA中的动态查询 时间日期的更多相关文章
-
Spring Data JPA 的 Specifications动态查询
主要的结构: 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询. ...
-
Spring data jpa 实现简单动态查询的通用Specification方法
本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...
-
Spring data JPA中使用Specifications动态构建查询
有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类 ...
-
【hql】spring data jpa中 @Query使用hql查询 问题
spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...
-
spring data jpa使用原生sql查询
spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...
-
如何在Spring Data JPA中引入Querydsl
一.环境说明 基础框架采用Spring Boot.Spring Data JPA.Hibernate.在动态查询中,有一种方式是采用Querydsl的方式. 二.具体配置 1.在pom.xml中,引入 ...
-
spring data jpa实现多条件查询(分页和不分页)
目前的spring data jpa已经帮我们干了CRUD的大部分活了,但如果有些活它干不了(CrudRepository接口中没定义),那么只能由我们自己干了.这里要说的就是在它的框架里,如何实现自 ...
-
Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)
推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...
-
spring data jpa 利用@Query进行查询
参照https://blog.csdn.net/yingxiake/article/details/51016234#reply https://blog.csdn.net/choushi300/ar ...
随机推荐
-
log4j.xml的实用例子
大多数讲log4j配置的教程用的都是log4j.properties文件,我觉得xml或许更好一点,在这里我提供一个我已经用于生产环境的log4j.xml的例子,先上代码,然后再解释: <?xm ...
-
Google数据中心B4网络具体实现
① 背景介绍 Google的网络有两种,一种是数据中心内部网络,另外一种是WAN网,其中WAN网又分为两种:一是数据中心之间的互联网络,属于内部网络(G-Scale Network),另外一种是面向I ...
-
flex 布局 初次接触这个好使又不是特别好用的布局方法
刚开始学前端的童鞋们应该也是一样先学习的table然后再学习了盒子模型,感觉终于学会了简单的网页布局,使用各种display,float,position绞尽脑汁给页面布局成自己想要的页面样式,然而, ...
-
PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用
通过 register_shutdown_function 方法,可以让我们设置一个当执行关闭时可以被调用的另一个函数. 也就是说,当我们的脚本执行完成或者意外死掉导致 php 执行即将关闭时,我们的 ...
-
Using dbms_shared_pool.purge to remove a single task from the library cache
我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...
-
转:C#写的WEB服务器
转:http://www.cnblogs.com/x369/articles/79245.html 这只是一个简单的用C#写的WEB服务器,只实现了get方式的对html文件的请求,有兴趣的朋友可以在 ...
-
查看kindle paperwhite2上卡索引书籍的方法
昨天kindle耗电量突然加快,经过检查和网络搜索得知是卡索引导致的耗电量增大.我自己通过关闭索引的方式解决了这个问题. 在这个过程中发现了一个可以直接找到所有卡索引书籍的方法,在此分享一下. 首先打 ...
-
libcurl get post http
一. 概念 1. 为什么要使用libcurl 1) 作为http的客户端,可以直接用socket连接服务器,然后对到的数据进行http解析,但要 ...
-
Weka初步
从前年開始使用weka最数据挖掘方面的研究,到如今有一年半的时间了.看到我们同组的兄弟写了关于weka方面的总结.我也想整理一下.由于网上的资料实在是太少.记得刚接手的时候,真是硬着头皮看代码.只是到 ...
-
四、View的工作原理
1.ViewRoot和DecorView ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完 ...