当前位置: 首页 > 知识库问答 >
问题:

如何在spring数据中使用OrderBy和findAll

华修永
2023-03-14

我使用的是spring数据,我的DAO看起来像

public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
    public findAllOrderByIdAsc();   // I want to use some thing like this
}

在上面的代码中,注释行显示了我的意图。spring数据是否可以提供内置功能,使用这样的方法查找所有记录的顺序按某一列与ASC/DESC?

共有2个答案

聂琨
2023-03-14

AFAIK,我认为使用直接方法命名查询是不可能的。但是,您可以使用sort类来使用内置的排序机制。存储库有一个findAll(Sort)方法,您可以将Sort的实例传递给该方法。例如:

import org.springframework.data.domain.Sort;

@Repository
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDAO studentDao;

    @Override
    public List<Student> findAll() {
        return studentDao.findAll(sortByIdAsc());
    }

    private Sort sortByIdAsc() {
        return new Sort(Sort.Direction.ASC, "id");
    }
} 
牟恺
2023-03-14
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
    public List<StudentEntity> findAllByOrderByIdAsc();
}

上面的代码应该可以工作。我用的是类似的东西:

public List<Pilot> findTop10ByOrderByLevelDesc();

它返回具有最高级别的10行。

重要:既然我已经被告知很容易错过这个答案的重点,这里有一点澄清:

findAllByOrderByIdAsc(); // don't miss "by"
       ^
 类似资料:
  • 问题内容: 我正在使用spring数据,我的DAO看起来像 在上面的代码中,注释行显示了我的意图。Spring Data是否可以提供内置功能来使用这种方法通过ASC / DESC按某列查找所有记录顺序? 问题答案: 上面的代码应该可以工作。我正在使用类似的东西: 它返回最高级别的10行。 重要提示: 由于有人告诉我很容易错过此答案的关键点,因此需要澄清一下:

  • 我想用MySQL和JPA设置Spring Boot。为此,我创建了:Person PersonRepository公司 个人控制器 开始上课示例: 对于数据库配置,我创建application.properties 所以我有项目结构: 但结果我有例外: 作为一个例子,我使用:spring boot示例数据jpa/pom。xml

  • 我有一个简单的JpaRepository和一个finder,它返回按名为“number”的属性降序排列的记录。“number”属性也是我的实体的@Id。这很好,但是有数千条记录,所以我想返回一个页面而不是列表。 如果我将查找器更改为以下内容,则排序不再起作用。我尝试过使用可分页参数的排序功能,但不起作用。还删除了OrderByNumberDesc,但结果相同。 EDIT-添加控制器方法 以下是我的

  • 我一直在hibernate中使用Spring数据,我想知道避免代码浪费的最佳类组织是什么。这是我的实际结构: 然后我使用这个接口 因此我实现了它 公共类DatabaseServicesImpl实现DatabaseServices{ }但我得到了这个例外

  • 我现在用这个POM来 将spring数据mongodb和spring云一起包含在同一个项目中。但现在,我需要升级spring data mongoDB,这是我需要的POM父配置: 现在问题发生了,我仍然需要保留Spring Cloud,根据我的理解,我在pom配置中只能有一个父级,所以我必须保留Spring-Cloud-starter-父级,并且应该已经包含Spring-boot-starter-

  • 我需要一个窗口函数,该函数按一些键(=列名)进行分区,按另一个列名排序,并返回排名前x的行。 这适用于升序: 但当我试图在第4行中将其更改为或时,我得到了一个语法错误。这里的正确语法是什么?