初次接触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. iframe 子页面获取父页面的元素并且控制样式

    父页面的代码 <div id="div5" style="position:relative;height:500px;">             ...

  2. JQ二级菜单练习之一~~~

    <div class="nav"> <ul> <li><a href="#">首页</a> < ...

  3. js对汉字首字母排序

    var city = ["北京","天津","上海","重庆","杭州"];city.sort(fu ...

  4. WCF初探-23:WCF中使用Message类(下)

    前言 在上一篇WCF中使用Message类(上)中,文章介绍了WCF中使用Message类的基本知识和怎样创建消息,本文是承接上一篇文章,如果想要更好的阅读本文,请先阅读上一篇文章.在这篇文章中,我将 ...

  5. IIS调试技巧

    VS2010如何调试IIS上的网站 通常,我们在Visual Studio里调试ASP.NET网站,都是加个断点,然后按F5,在VS自带的虚拟服务器下调试的.但有时候,VS自带的服务器弱爆了,无法满足 ...

  6. Jmeter—8 连接microsoft sql server数据库取数据

    本文以Jmeter 连接microsoft sql server为例. 1 从微软官网下载Microsoft SQL Server JDBC Driver 地址:http://www.microsof ...

  7. lightoj1030

    //Accepted 1688 KB 0 ms //http://kicd.blog.163.com/blog/static/126961911200910168335852/ //链接里的例子讲的很 ...

  8. hdu 2095

    ps:真是日了狗...英语渣渣理解题目不行,开了个100W数组来算,还优化了下时间,还是超时了,看了题解才知道用异或. N个数异或,会得出其中是奇数的一个.比如 1^1^3^2^2 = 3.   1^ ...

  9. sublime text3 快捷键设置

    //插入到key binding user 里面,浏览器安装路径修改成自己的路径 1[ //firefox测试快捷键 { "keys":["f3"], &quo ...

  10. 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误

    更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误 我的本本是win7,雷凌网卡Ralink RT3290   802.1 ...