解决jpa用原生sql无法分页的问题

本文详细介绍了如何在Java项目中实现分页查询,包括从接口获取分页参数、业务层调用JPA进行查询,以及使用原生SQL进行联合查询并限制查询结果的方法。特别关注了union联合查询时的分页技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、获取接口传来的分页参数

String page_id=request.getParameter("page_id");//页码
String limit=request.getParameter("limit");    //每页数据条数
//判断为空时赋予初始值
if(StringUtils.isBlank(page_id)){
     page_id="1";
  }
if(StringUtils.isBlank(limit)){
     limit="10";
  }
//用PageRequest 接收分页参数
PageRequest pageRequest = PageRequest.of(Integer.parseInt(page_id) - 1, Integer.parseInt(limit));

2、业务层调用jpa查询

List<Map<String, Object>> comments = postCommentRepository.findCommentList("0", post_id, customerEntity.getId(), Integer.parseInt(pageRequest.getOffset()+""),pageRequest.getPageSize());

3、jpa用原声sql查询(nativeQuery = true)

      加limit 使用传来的pageOffset和pageSize限制查询几条即可

     此时要用List接收查询的数据,而不能用Page接收

@Query(value = "(select id id,content content,audit_flag audit_flag,create_date create_time," +
            "customer_id customer_id " +
            "from post_comment " +
            "where del_flag=?1 and post_id=?2 and audit_flag='1')" +
            "union " +
            "(select id id,content content,audit_flag audit_flag,create_date create_time," +
            "customer_id customer_id " +
            "from post_comment " +
            "where del_flag=?1 and post_id=?2 and customer_id=?3 and audit_flag in('0','2'))" +
            "limit ?4,?5",nativeQuery = true)
    List<Map<String,Object>> findCommentList(String delFlag,String post_id,String customerId,int pageOffset,int pageSize);

注意:我这里用的是union联合查询,要对查出的整体数据进行分页,则需要将union两边的sql用括号包起来

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值