初次接触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实现多条件分页查询的更多相关文章

  1. Spring Data JPA整合REST客户端Feign时: 分页查询的反序列化报错的问题

    Type definition error: [simple type, class org.springframework.data.domain.Page]; nested exception i ...

  2. java(样品集成框架spring、spring mvc、spring data jpa、hibernate)

    这是你自己的参考springside集成框架的开源项目.主要的整合spring.spring mvc.spring data jpa.hibernate几个框架,对于这些框架中仍然感觉更舒适sprin ...

  3. 转:spring data jpa、 hibernate、 jpa 三者之间的关系

    原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...

  4. SpringBoot系列之Spring Data Jpa集成教程

    SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...

  5. spring data jpa、Hibernate开启全球唯一UUID设置

    spring data jpa.Hibernate开启全球唯一UUID设置 原文链接:https://www.cnblogs.com/blog5277/p/10662079.html 原文作者:博客园 ...

  6. javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  7. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

    基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...

  8. 简述 JPA 与 Spring Data JPA 与 Hibernate

    1.JPA是什么?以及相关概述 JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范! Sun提出此规范有2个原因: 1.简化现有Java EE和Java S ...

  9. spring data jpa、 hibernate、 jpa 三者之间的关系

    http://www.cnblogs.com/xiaoheike/p/5150553.html JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架-- ...

随机推荐

  1. 使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...

  2. Sqlserver2012 中文乱码解决

    1.在Windows Azure的数据库中,如果选择默认字符编码,那么在创建表字段是,字符串类型应该为nvarchar,如果是varchar将会出现乱码,同样的的在sql语句中生命变量,也是需要将字符 ...

  3. js面向对象选项卡

    window.onload=function() //面向对象 { var tab=new tabSwitch("div1"); var tab=new tabSwitch(&qu ...

  4. 第十二章 非对称加密算法-RSA

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与D ...

  5. PDF firefox转换器

  6. Windows Store App 文件选取器

    使用文件选取器可以访问除上面介绍的"应用程序存储"和"用户库"两个位置之外的本地文件或者文件夹.文件选取器是应用与系统进行交互的一个接口,通过文件选取器可以在应 ...

  7. Oracle中TO_DATE用法

    TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits 三位年 显示值:007 yyy ...

  8. 【62测试】【状压dp】【dfs序】【线段树】

    第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标 ...

  9. Android - PopupWindow

    PopupWindow就是一个可以显示在当前界面上的浮动容器,它可以用来显示任意一个View,同时还可以指定显示的位置. 下面写一个显示下拉的例子: PopupWindow mpopupWindow; ...

  10. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端

    转自:http://www.cnblogs.com/fengyun99/p/3541254.html 上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是 ...