【java】spring-data-jpa 集成hibernate实现多条件分页查询
初次接触spring-data-jpa,实现多条件分页查询。
基础环境 Spring Boot+spring-data-jpa+hibernate+mysql
1.接口
要继承这个接口,这个接口提供了多条件分页的方法。

public interface RjAuthuInfoRespository extends JpaRepository<RjAuthInfo,Long>,JpaSpecificationExecutor<RjAuthInfo> {
}
2、service 接口和实现
public interface RjAuthService {
Page<RjAuthInfo> findAll(Map<String,Object> map);
}
@Service
public class RjAuthServiceImpl implements RjAuthService { @Autowired
private RjAuthuInfoRespository rjPageRepository; @Override
public Page<RjAuthInfo> findAll(Map<String,Object> map) { return rjPageRepository.findAll(new Specification<RjAuthInfo>() { Long hotel =(Long)map.get("hotel");
Date start = (Date) map.get("start");
Date end = (Date) map.get("end");
public Predicate toPredicate(Root<RjAuthInfo> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {
Path<Long> hotelPath = root.get("hotel");
Path<Date> date = root.get("date"); /**
* 连接查询条件, 不定参数,可以连接0..N个查询条件
*/
List<Predicate> predicates = Lists.newArrayList();
if(start!=null){
predicates.add(cb.greaterThan(date,start));
}
if(end!=null){
predicates.add(cb.lessThan(date,end));
}
if(null != hotel){
predicates.add(cb.equal(hotelPath,hotel));
}
query.where(predicates.toArray(new Predicate[predicates.size()]));
return null;
} }, new PageRequest((int)map.get("page")-1,(int)map.get("size"))); } }
3、控制层实现
封装自己的条件到service查询。
/**
* 条件查询认证信息
* @param start 开始时间
* @param end 结束时间
* @param hotel 酒店ID
* @param page 当前页
* @param size 每页记录数
* @return
*/
@RequestMapping(path="getAuthInfo",method ={RequestMethod.GET,RequestMethod.POST})
public @ResponseBody Page<RjAuthInfo> test(@RequestParam(value = "start",required = false)String start,@RequestParam(value = "end",required = false)String end,
@RequestParam(value = "hotel",required = false)String hotel,@RequestParam("page")int page,@RequestParam("size")int size){ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date a= null;
Date b=null;
Long hotelId=null;
try {
if(!StringUtils.isEmpty(start)){
a = format.parse(start);
}
if(!StringUtils.isEmpty(end)){
b = format.parse(end);
}
if(!StringUtils.isEmpty(hotel)){
hotelId=Long.valueOf(hotel);
} } catch (Exception e) {
log.error(e.getMessage(),e);
return null;
}
Map<String,Object> map= Maps.newHashMap();
map.put("hotel",hotelId);
map.put("start",a);
map.put("end",b);
map.put("page",page);
map.put("size",size);
return rjAuthService.findAll(map);
}
【java】spring-data-jpa 集成hibernate实现多条件分页查询的更多相关文章
- Spring Data JPA整合REST客户端Feign时: 分页查询的反序列化报错的问题
Type definition error: [simple type, class org.springframework.data.domain.Page]; nested exception i ...
- java(样品集成框架spring、spring mvc、spring data jpa、hibernate)
这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适sprin ...
- 转:spring data jpa、 hibernate、 jpa 三者之间的关系
原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...
- SpringBoot系列之Spring Data Jpa集成教程
SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...
- spring data jpa、Hibernate开启全球唯一UUID设置
spring data jpa.Hibernate开启全球唯一UUID设置 原文链接:https://www.cnblogs.com/blog5277/p/10662079.html 原文作者:博客园 ...
- javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful
一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...
- jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...
- 简述 JPA 与 Spring Data JPA 与 Hibernate
1.JPA是什么?以及相关概述 JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范! Sun提出此规范有2个原因: 1.简化现有Java EE和Java S ...
- spring data jpa、 hibernate、 jpa 三者之间的关系
http://www.cnblogs.com/xiaoheike/p/5150553.html JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架-- ...
随机推荐
- java的concurrent用法详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...
- 图的深度优先和广度优先遍历(图以邻接表表示,由C++面向对象实现)
学习了图的深度优先和广度优先遍历,发现不管是教材还是网上,大都为C语言函数式实现,为了加深理解,我以C++面向对象的方式把图的深度优先和广度优先遍历重写了一遍. 废话不多说,直接上代码: #inclu ...
- Makefile.am链接openCV库的写法
6 INCLUDES = `pkg-config opencv --cflags` -I./ 17 bin_PROGRAMS+=SegRecogServerDeme 18 SegRecogServer ...
- HTML5基本元素初探
最近看了一些HTML5的基础知识,写了一些小案例,记录一下,方便查找. 1.新建的HTML5页面中显著的变化是:DOCTYPE声明变简洁(<!DOCTYPE html>) / <me ...
- 无任何网络提供程序接受指定的网络路径(系统服务里没有workstation服务)
今天同事访问公司服务器时,提示“无任何网络提供程序接受指定的网络路径”,网络ping正常,把防火墙关掉,再次尝试问题如故. 于是上网搜索: 1.服务停止:一般有workstation,server,c ...
- 9patch边框黑线的含义
上面黑线或者点表示纵向可拉伸的区域 一般一个点即可 左边黑线或者点表示横向可拉伸的区域 一般一个点即可 下面表示纵向填放内容的区域 一般是一条黑线 右边表示横向填放内容的区域 一般是一条黑线
- IT公司100题-tencent-打印所有高度为2的路径
问题描述: 打印所有到叶子节点长度为2的路径 10 / \ 6 16 / \ / \ 4 8 14 18 / \ / \ \ 2 5 12 15 20 / 11 ...
- 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...
- AngularJS拦截器
AngularJS是通过拦截器提供了一个全局层面对响应进行处理的途径.拦截器实际是$http服务的基础中间件,用来向应用的业务流程中注入新的逻辑,其核心是服务工厂,通过向 $httpProvider. ...
- HDU 5373 (大水坑题---被11整除原来有规律)
题意:告诉一个数n,然后求出所有的位数和,插在n的尾部,重复求t次,判断最终的数是否能被11整除. 分析:直接模拟的过程,并且模拟的除的过程,却TLE,以为是方法错了,因为每次都得循环求一遍位数和: ...