私は春のデータを使用しています、そして私のDAOはのように見えます
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public findAllOrderByIdAsc(); // I want to use some thing like this
}
上記のコードで、コメント行は私の意図を示しています。 ASC/DESCでは、Spring Dataはそのような方法を使用してすべてのレコードの順序を列ごとに見つけるための組み込み機能を提供できますか?
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public List<StudentEntity> findAllByOrderByIdAsc();
}
上記のコードは動作するはずです。私は似たようなものを使っています:
public List<Pilot> findTop10ByOrderByLevelDesc();
最高レベルの10行を返します。
重要: /この答えの要点を見逃しやすいと言われたので、ここで少し説明します。
findAllByOrderByIdAsc(); // don't miss "by"
^
私の知る限りでは、これは直接メソッド命名クエリでは不可能だと思います。ただし、 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");
}
}
Spring Data JPA - リファレンスドキュメントのセクション5.3をご覧ください。クエリメソッド 、特にセクション で5.3.2。クエリの作成 、 " 内の表3.メソッド名内でサポートされているキーワード "(2019-05-03現在のリンク)。
私はそれがまさにあなたが必要とするものとあなたが述べたのと同じ質問がうまくいくべきであると思う...
はい、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"));
}
}
春のデータの並べ替え: 並べ替え
この例では、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);
}
}