文档章节

Spring Boot Jpa 分页

 冰shang蚊
发布于 2017/09/05 11:50
字数 518
阅读 44
收藏 1

Jpa中分页功能可分为两种方式,一种是直接通过继承CrudRepository类实现,CrudRepository类是属于org.springframework.data.repository下的类,另一种是通过手动编写实现,然而这两种都需要用Pageable接口类,此类是在org.springframework.data.domain包下,下面是具体如何进行分页操作

继承方式:

编写一个XXRepository接口类,分别继承JpaSpecificationExecutor、CrudRepository,代码如下:

Repository接口代码:

/**
 * XXX代表具体的domain对象名称 
 */
public interface XXXRepository extends JpaSpecificationExecutor<T>, CrudRepository<T, ID> {
}

Service类代码:

@Service
public class XXXService{
  
  @Autowired
  private XXXRepository xxxRepository;

  //获取总记录
  public int getTotalCount(){
     rerurn xxxRepository.findAll().size();
  } 
     
  // 得到总页数  
  public int getTotalPage(int pageSize){
    int totalCount = getTotalCount();
    int totalPage = totalCount%pageSize == 0 ? totalCount/pageSize : totalCount/pageSize +1 ;
    if(totalPage<1){
      totalPage = 1;
    }
    return totalPage;
  }

 //分页搜索
 // list 搜索条件集合 多个主键ID
 public Page<XXX> findByPage(List list,Pageable pageable){
   Specification<MyOrder> spec = SpecificationFactory.in("id", list);
   return xxxRepository.findAll(spec,pageable);
 }
}

Controller调用执行:

@Controller
@RequestMapping("/XXX")
public class XXXController {
   //声明 xxxService
   @Autowired
   private XXXService xxxService; 

  //编写执行分页方法
  @RequestMapping(value="/list",method=RequestMethod.GET)
  public String list(Model model){
   
   //总页数
   int totalPage = xxxService.getTotalPage();
   //每页展示数量
   int pageSize = 50;

   //当前页
   int pageIndex = 1;
 
  //设置降序展示数据
  Sort sort = new Sort(Sort.Direction.ASC, "id");

  //配置分页
  Pageable pageAble= new PageRequest(pageIndex,pageSize,sort);

  //构建查询条件
  List<Integer> list = new ArrayList<Integer>();
  list.add(11);
  //执行搜索方法
  Page<XXX> page =  xxxService.findByPage(list,pageAble); 

  //打印数据
  System.out.println(page);
//总元素
  System.out.println(page.getTotalElements());
//总页数
  System.out.println(page.getTotalPages());
//数据集合
  for (XXX  c:page.getContent()){
        System.out.println(c.toString());
    }
   

   return null;
  }
}

构建分页查询条件工具类:SpecificationFactory类,这个类名编写返回Specification类的检索条件方法

手动编写实现分页:

1.在XXXRepository类中编写分页方法:

//根据条件分页搜索
Page<XXX> findByStatus(int status, Pageable pageable);

2.在XXXService类实现其分页方法

public Page<XXX> findStatusByPage(int status,int size){
    //总记录
    int totalCount= getTotalByGoodsCounts(1);
    //每页展示数量
    int pageSize=500;
    //总页数
    int totalPage  = totalCount%pageSize==0 ? totalCount/pageSize : totalCount/pageSize +1;
   
    //设置排序属性值
    Sort sort = new Sort(Sort.Direction.ASC, "id");

    Pageable pageAble= new PageRequest(1,size,sort);

    Page<XXX> pageResult = xxxRepository.findByStatus(status,pageAble);
    //打印结果
    System.out.println(pageResult.getContent()+"---");
    return null;
}

3.Controller类中调用方法

xxxService.findStatusByPage(status,pageIndex);

完成分页功能

© 著作权归作者所有

粉丝 1
博文 47
码字总数 30534
作品 0
海淀
私信 提问
spring-boot整合spring-data-jpa

一、创建spring-boot工程 新建spring-boot项目,选择项目类型为gradle project,勾选初始化依赖如下: 删除resources下application.properties,创建application.yml文件(.yml与.properties...

louieSun
2018/06/04
0
0
SpringBoot | 第三十章:Spring-data-jpa的集成和使用

前言 在前面的第九章:Mybatis-plus的集成和使用章节中,介绍了使用框架进行数据库的访问。今天,我们来简单学习下如何使用进行数据库的访问。由于本人未使用过,也是趁着写博文的机会查阅了...

oKong
2018/10/31
278
0
Spring Data JPA实战视频教程

Spring Data JPA实战视频教程 视频大纲 JPA入门 Spring Data JPA入门 Repository的定义 查询方法的命名策略 JPQL查询,结果映射 Named Query,Named Native Query 排序,分页 JPA Criteria查...

刘宗泽
2018/06/26
0
0
深入 Spring Boot :实现对 Fat Jar jsp 的支持

原文出处:Hengyunabc spring boot 对于jsp支持的限制 对于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持fat jar。参考官方文档: https://docs.spring.io/spring-boot/docs/cu...

Hengyunabc
2018/06/04
0
0
Spring Boot [组件学习-Spring Data JPA]

导读: 在上篇文章中对Spring MVC常用的一些注解做了简要的说明,在这篇文章中主要对Spring Data JPA 做一个简要的说明,并附有一个简单的例子,可以体会到Spring Data JPA 的强大之处。 Sp...

yangrd
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
24分钟前
13
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
47分钟前
19
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
55分钟前
28
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
今天
23
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部