SpringBoot jpa实现自定义语句分页查询
例:1.JPA持久层 InvoiceRepository.java
@Repository public interface InvoiceRepository extends JpaRepository<Invoice, Integer> { @Query( value = "SELECT * from invoice_apply where company_id=?1 and IF (?2 is null ,1=1,status = ?2)", countQuery = "select count(*) from invoice_apply where company_id=?1 and IF (?2 is null ,1=1,status = ?2)", nativeQuery = true) Page<Map> findInvoice(int companyID, String status, Pageable pageable); }
2.服务层
@Override public Map findInvoice(int companyID, String status, Integer page, Integer pageSize) { Double amount = companyFinanceRepository.findDCompanyFinance(companyID); //分页查询 Pageable pageable = PageRequest.of(page, pageSize, Sort.Direction.ASC, "id"); Page<Map> invoiceList = invoiceRepository.findInvoice(companyID, status, pageable); //重组返回结果 Map map = new HashMap(); map.put("invoice_amount", amount); map.put("list", invoiceList.getContent());//数据列表 map.put("total", invoiceList.getTotalElements());//记录总条数 map.put("current_page", invoiceList.getNumber());//当前页码 return map; }