Spring Boot Jpa 分页

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);

完成分页功能

转载于:https://my.oschina.net/u/2251646/blog/1529180

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值