Pet*_*zov 5 java spring jpa spring-data-jpa
我想创建带有分页的 JPA。我尝试实现这个:
@Override
public Page<PaymentTransactions> findAll(Specification<PaymentTransactions> spec, Pageable pageable) {
int pageNumber = pageable.getPageNumber();
int pageSize = pageable.getPageSize();
String hql = "select e from " + PaymentTransactions.class.getName() + " e LIMIT :limit OFFSET :offset";
TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class).setParameter("limit", pageSize).setParameter("offset", pageNumber);
Page<PaymentTransactions> paymentTransactions = (Page<PaymentTransactions>) query.getResultList();
return paymentTransactions;
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用转换的情况下返回页面对象?
编辑我也尝试过这个:
终点:
@Autowired
private PaymentTransactionRepository transactionRepository;
@GetMapping
public Page<PaymentTransactionsDTO> page(@PathVariable int page, @PathVariable int size) {
return transactionRepository
.findAll(page, size)
.map(mapper::toDTO);
}
Run Code Online (Sandbox Code Playgroud)
存储库:
public interface PaymentTransactionRepository extends CrudRepository<PaymentTransactions, Integer>, JpaSpecificationExecutor<PaymentTransactions> {
@Query(nativeQuery=true,
value="SELECT * FROM payment_transactions \n-- #pageable\n",
countQuery="SELECT count(*) FROM payment_transactions")
Page<PaymentTransactions> findAll(Pageable page);
}
Run Code Online (Sandbox Code Playgroud)
编辑2。我也尝试过这个:
@GetMapping("page")
public Page<PaymentTransactionsDTO> page(@PathVariable int page, @PathVariable int size) {
PageRequest pageRequest = PageRequest.of(page, size);
return transactionRepository.findAll(pageRequest).map(mapper::toDTO);
}
Run Code Online (Sandbox Code Playgroud)
界面:
public interface PaymentTransactionRepository extends CrudRepository<PaymentTransactions, Integer>, JpaSpecificationExecutor<PaymentTransactions> {
Page<PaymentTransactions> findAll(Pageable page);
}
Run Code Online (Sandbox Code Playgroud)
执行:
@Override
public Page<PaymentTransactions> findAll(Pageable page) {
int pageNumber = page.getPageNumber();
int pageSize = page.getPageSize();
String hql = "select e from " + PaymentTransactions.class.getName() + " e LIMIT :limit OFFSET :offset";
TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class)
.setParameter("limit", pageSize).setParameter("offset", pageNumber);
Page<PaymentTransactions> paymentTransactions = (Page<PaymentTransactions>) query.getResultList();
return paymentTransactions;
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了 2 个 SQL 查询。也许它会有用。
为列表对象创建SQL并添加页面参数:
query.setMaxResults(pageable.getPageSize());
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
Run Code Online (Sandbox Code Playgroud)使用包装的 Select count(*) 创建相同的 SQL
countQuery.getSingleResult();
Run Code Online (Sandbox Code Playgroud)然后将其设为 paga 对象
Page<ViewContract> page = (Page<ViewContract>) new PageImpl(
selectQueryResultsList,
pageable,
countQueryResult);
Run Code Online (Sandbox Code Playgroud)
为了获得分页和排序的功能,我们必须扩展PagingAndSortingRepository
orJpaRepository
接口。
对于您的情况,我们可以通过以下代码实现相同的目的:
终点:
@Autowired
private PaymentTransactionRepository transactionRepository;
@GetMapping
public Page<PaymentTransactionsDTO> page(@PathVariable int page, @PathVariable int size) {
PageRequest pageRequest = PageRequest.of(page, size);
return transactionRepository
.findAll(pageRequest)
.map(mapper::toDTO);
}
Run Code Online (Sandbox Code Playgroud)
存储库:
public interface PaymentTransactionRepository extends JpaRepository<PaymentTransactions, Integer> {
Page<PaymentTransactions> findAll(Pageable page);
}
Run Code Online (Sandbox Code Playgroud)
请尝试使用这个,它应该有效。
归档时间: |
|
查看次数: |
12790 次 |
最近记录: |