初次接触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. 横向滑动的HorizontalListView滑动指定位置的解决方法

    项目中用到了自定义横向滑动的控件:HorizontalListView,点击其中一项,跳转到另外一个大图界面,大图界面也是HorizontalListView,想使用setSelection方法设定 ...

  2. 字符串与Objec之间互相转换

    字符串与Objec之间互相转换可通过json实现. JSON.parse(str);// 字符串转Json Object JSON.stringify(obj);// Obj转字符串

  3. Redis + php扩展的安装与配置(windows)

    -->安装Redis服务 下载redis安装包 http://pan.baidu.com/s/1pJiVFHx 下载后解压 把解压后文件夹里面的文件(根据自己的系统位数选择32位或者64位)拷贝 ...

  4. BSD Apache GPL LGPL MIT

    当Adobe.Microsoft.Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来! 最初来自:sinoprise.com/read.php?tid-662-page-e-fpa ...

  5. 2014-07-29 Asp.Net 中级工程师 笔试题

    一.选择题    1.下列描述错误的是() A  类不可以被多重继承而接口可以: B  抽象类自身可以定义成员而接口不可以: C  抽象类和接口都不能被实例化: D   一个类可以继承多个基类和多个基 ...

  6. MVC——入门+简单的小实例

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controler)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...

  7. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

  8. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  9. DownloadManager补漏

    原始完成于:2014-10-24 20:01:03 DownloadManager是一个处理HTTP下载请求的系统服务: 1. 基本用法 1 private void download() { 2 R ...

  10. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...