springboot+jpa 实现分页

分页实体



import java.util.ArrayList;
import java.util.List;

/**
 * 分页工具
 */
public class PageUtil {

    /**
     * 每页大小
     */
    private int pageSize;

    /**
     * 当前页为第几页
     */
    private int number;

    /**
     * 总共有多少页
     */
    private int totalPages;

    /**
     * 总共有多少条数据
     */
    private int totalElements;

    /**
     * 数据
     */
    private List content = new ArrayList();

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }

    public int getTotalElements() {
        return totalElements;
    }

    public void setTotalElements(int totalElements) {
        this.totalPages = totalElements % pageSize == 0 ? totalElements/pageSize : (totalElements/pageSize) + 1;
        this.totalElements = totalElements;
    }

    public List getContent() {
        return content;
    }

    public void setContent(List content) {
        this.content = content;
    }
}

controller 

/**
     * 分页
     * @param pageNum   页码
     * @param pageSize  页面大小
     * @return PageUtil 里面有共有多少条数 和列表
     */
    @RequestMapping("getAllCommodity")
    public PageUtil getAllCommodity(Integer pageNum, Integer pageSize){
        return allService.getAll(pageNum,pageSize);
    }

Service

 /**
     * 采购商品维护列表
     * @param pageNum   页码
     * @param pageSize  页面大小
     * @return 
     */
    @Override
   public  PageUtil getAllCommodity(Integer pageNum, Integer pageSize){
        PageUtil pageUtil=new PageUtil();
        //查询数据总条数
        int totalNumbr=allDao.getTotalNumber(gongyingshang,status,guanjianzi);
        //页面大小
        pageUtil.setPageSize(pageSize);
        //信息总条数
        pageUtil.setTotalElements(totalNumbr);
        //当前为第几页
        pageUtil.setNumber(pageNum);
        //页面内容
        pageUtil.setContent(allDao.getCommodity((pageNum-1)*pageSize,pageSize));
        return pageUtil;
    }

dao

    查询总条数

 /**
     * 获取总条数
     * @return
     */
    @Override
    public int getTotalNumber(Integer gongyingshang, Integer status, Integer guanjianzi) {
        StringBuffer stringBuffer=new StringBuffer("select count(1) from 表名 where 1=1 ");
        Object result=entityManager.createNativeQuery(stringBuffer.toString()).getSingleResult();
   
        return Integer.parseInt(result.toString());
    }

    查询页面内容

 /**
     * 查询页面内容
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public List<Commodity> getCommodity( Integer pageNum, Integer pageSize) {

       StringBuffer stringBuffer=new StringBuffer("select 字段名称 from 表名 where 1=1 ");
        //XXXX对应的实体类名
        List<XXX> result=null;

     stringBuffer.append(" limit :page,:size");
           
  
 result=entityManager.createNativeQuery(stringBuffer.toString()).setParameter("page",pageNum).setParameter("size",pageSize).getResultList();
        return  result;
    }

 

转载于:https://my.oschina.net/u/3535099/blog/3053073

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对SpringBoot+JPA后端代码逻辑过大,执行时间过长,效率慢的问题,可以从以下几个方面进行优化: 1. 数据库性能优化:可以考虑对数据库进行优化,如建立索引、使用缓存等,以提高查询速度。 2. 代码逻辑优化:可以评估并优化代码逻辑,避免无用的计算和数据重复读取,减少不必要的资源消耗。 3. 异步编程:使用异步编程模型,如使用CompletableFuture等,可以提高并发访问的效率。 4. 分页查询:对于大量数据的查询,可以采用分页查询的方式,减少查询数据量,提高查询速度。 5. 服务拆分:将单个服务拆分为多个服务,分别处理不同的请求,以提高服务的并发性和吞吐量。 针对gateway timeout超时问题,可以将超时时间调整为更长的时间,或者对代码进行优化,提高执行效率。 下面是一个使用分页查询来优化SpringBoot+JPA后端代码的示例代码: ``` @GetMapping("/users") public ResponseEntity<List<User>> getUsers(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable paging = PageRequest.of(page, size); Page<User> users = userRepository.findAll(paging); if(users.hasContent()) { return new ResponseEntity<>(users.getContent(), HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } ``` 在上述代码中,我们使用了Pageable和PageRequest来实现分页查询。这样,当用户请求/users接口时,只会返回指定范围内的数据,而不是将所有用户数据都查询出来。这样可以大大提高查询速度,并且减少了服务器的资源消耗,从而避免了网关超时问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值