gpt4 book ai didi

java - 在搜索功能中排序

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:06 24 4
gpt4 key购买 nike

我使用此代码通过 JPA 和 Spring 获取数据库行:

return transactionService.findAll(page, size)


public Page<PaymentTransactions> findAll(int page, int size) {
return dao.findAll(PageRequest.of(page,size, new Sort(Sort.Direction.DESC, "createdAt")));
}

我想为这段代码实现相同的排序:

return transactionService.getAllBySpecification(specification, pageable)

@Override
public Page<PaymentTransactions> getAllBySpecification(final Specification<PaymentTransactions> specification, final Pageable pageable) {
return dao.findAll(specification, pageable);
}

你知道我如何使用规范实现按列的排序方向吗?像这样:

return dao.findAll(specification, PageRequest.of(page,size, new Sort(Sort.Direction.DESC, "createdAt")));

附加问题:

我可以为 Pagable 对象设置排序方向吗?像这样:

      @Override
public Page<PaymentTransactions> getAllBySpecification(final Specification<PaymentTransactions> specification, final Pageable pageable) {
return dao.findAll(specification, PageRequest.of(pageable, new Sort(Sort.Direction.DESC, "createdAt")));
}

最佳答案

除了 JpaSpecificationExecutor 之外,您不需要其他任何东西. Spring 将使用此接口(interface)自动创建:

Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable)

您似乎正在寻找的方法。所以,目前还不清楚问题出在哪里,也许你导入了错误的类?或者,如果您只想生成 PageRequest对于 getAllBySpecification使用 pagesize你可以有这样的东西:

    public Page<Entity> getAllBySpecification(
Specification<Entity> specification,
int page, int size) {

return dao.findAll(specification, createMyPageRequest(page, size));
}

private PageRequest createMyPageRequest(int page, int size) {
return PageRequest.of(page, size, new Sort(Sort.Direction.DESC, "createdAt"));
}

无论如何,如果您需要这些 API 的完整编译示例...

can you show me some code example please?

... 在这里:

import org.springframework.data.domain.*;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public class SortFunctionality {
private Dao dao;

public Page<Entity> findAll(int page, int size) {
return dao.findAll(createMyPageRequest(page, size));
}

public Page<Entity> getAllBySpecification(
Specification<Entity> specification,
int page, int size) {

return dao.findAll(specification, createMyPageRequest(page, size));
}

public Page<Entity> getAllBySpecification(
Specification<Entity> specification,
Pageable pageable) {

PageRequest pageRequest = createMyPageRequest(
pageable.getPageNumber(),
pageable.getPageSize());

return dao.findAll(specification, pageRequest);
}

private PageRequest createMyPageRequest(int page, int size) {
return PageRequest.of(page, size, new Sort(Sort.Direction.DESC, "createdAt"));
}

static interface Dao extends
JpaRepository<Entity, Integer>, JpaSpecificationExecutor<Entity> {}

static class Entity {}
}

附加问题的编辑:

是的,您可以通过提取 pageNumber 来实现此目的和 pageSize来自 Pageable参数并使用它们创建您的自定义 PageRequest (PageRequest 带有硬编码排序标准)与 createMyPageRequest我包含在演示代码中的实用程序。最后,您可以使用 PageRequest调用 findAll像往常一样的方法:

    public Page<Entity> getAllBySpecification(
Specification<Entity> specification,
Pageable pageable) {

PageRequest pageRequest = createMyPageRequest(
pageable.getPageNumber(),
pageable.getPageSize());

return dao.findAll(specification, pageRequest);
}

我更新了之前的完整演示以反射(reflect)这一新增内容。它也进行了一些重构,因此如果您将此新方法粘贴到演示的先前版本的副本上,它将出错。

Complete code on GitHub

希望这对您有所帮助。

关于java - 在搜索功能中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com