web-dev-qa-db-ja.com

Spring DataのfindAllでOrderByを使用する方法

私は春のデータを使用しています、そして私のDAOはのように見えます

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

上記のコードで、コメント行は私の意図を示しています。 ASC/DESCでは、Spring Dataはそのような方法を使用してすべてのレコードの順序を列ごとに見つけるための組み込み機能を提供できますか?

213
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
    public List<StudentEntity> findAllByOrderByIdAsc();
}

上記のコードは動作するはずです。私は似たようなものを使っています:

public List<Pilot> findTop10ByOrderByLevelDesc();

最高レベルの10行を返します。

重要: /この答えの要点を見逃しやすいと言われたので、ここで少し説明します。

findAllByOrderByIdAsc(); // don't miss "by"
       ^
493
Sikor

私の知る限りでは、これは直接メソッド命名クエリでは不可能だと思います。ただし、 Sort クラスを使用すると、組み込みのソートメカニズムを使用できます。リポジトリにはSortのインスタンスを渡すことができる findAll(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");
    }
} 
44
Paul Samsotha

Spring Data JPA - リファレンスドキュメントのセクション5.3をご覧ください。クエリメソッド 、特にセクション で5.3.2。クエリの作成 、 " 内の表3.メソッド名内でサポートされているキーワード "(2019-05-03現在のリンク)。

私はそれがまさにあなたが必要とするものとあなたが述べたのと同じ質問がうまくいくべきであると思う...

11
shlomi33

はい、Spring Dataのクエリメソッドを使ってソートすることができます。

例:idフィールドの値を使用して昇順または降順.

コード:

  public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
    public findAllByOrderByIdAsc();   
}

代替ソリューション:

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

    @Override
    public List<Student> findAll() {
        return studentDao.findAll(orderByIdAsc());
    }
private Sort orderByIdAsc() {
    return new Sort(Sort.Direction.ASC, "id")
                .and(new Sort(Sort.Direction.ASC, "name"));
}
}

春のデータの並べ替え: 並べ替え

2

この例では、OrderByの種類をカスタマイズするための完全な例を紹介します。

 import Java.util.List;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.*;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.data.domain.Sort;
 /**
 * Spring Data  repository for the User entity.
 */
 @SuppressWarnings("unused")
 @Repository
 public interface UserRepository extends JpaRepository<User, Long> {
 List <User> findAllWithCustomOrderBy(Sort sort);
 }

この例を使用します。Sortのインスタンスというオブジェクトを動的に構築するためのメソッド。

import org.springframework.data.domain.Sort;
public class SampleOrderBySpring{
 Sort dynamicOrderBySort = createSort();
     public static void main( String[] args )
     {
       System.out.println("default sort \"firstName\",\"name\",\"age\",\"size\" ");
       Sort defaultSort = createStaticSort();
       System.out.println(userRepository.findAllWithCustomOrderBy(defaultSort ));


       String[] orderBySortedArray = {"name", "firstName"};
       System.out.println("default sort ,\"name\",\"firstName\" ");
       Sort dynamicSort = createDynamicSort(orderBySortedArray );
       System.out.println(userRepository.findAllWithCustomOrderBy(dynamicSort ));
      }
      public Sort createDynamicSort(String[] arrayOrdre) {
        return  Sort.by(arrayOrdre);
        }

   public Sort createStaticSort() {
        String[] arrayOrdre  ={"firstName","name","age","size");
        return  Sort.by(arrayOrdre);
        }
}
0
S. FRAJ