wake-up-neo.net

So verwenden Sie OrderBy mit findAll in Spring Data

Ich verwende Federdaten und mein DAO sieht aus

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

Im obigen Code zeigt die kommentierte Zeile meine Absicht. Kann spring Data eingebaute Funktionen bieten eine solche Methode verwenden, um alle Datensätze in einer Spalte mit ASC/DESC zu finden?

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

Der obige Code sollte funktionieren. Ich verwende etwas ähnliches:

public List<Pilot> findTop10ByOrderByLevelDesc();

Es gibt 10 Zeilen mit der höchsten Stufe zurück.

WICHTIG: Da mir gesagt wurde, dass es einfach ist, den Schlüsselpunkt dieser Antwort zu übersehen, hier eine kleine Klarstellung:

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

AFAIK, ich glaube nicht, dass dies mit einer direkten Methodennamenabfrage möglich ist. Sie können jedoch den integrierten Sortiermechanismus verwenden, indem Sie die Sort -Klasse verwenden. Das Repository verfügt über eine findAll(Sort) - Methode, an die Sie eine Instanz von Sort übergeben können. Zum Beispiel:

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");
    }
} 
45
Paul Samsotha

Bitte schauen Sie hier: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

Unter Abschnitt: "Tabelle 2.3. Unterstützte Schlüsselwörter in Methodennamen"

Ich denke, es hat genau das, was Sie brauchen und die gleiche Abfrage, die Sie angegeben haben, sollte funktionieren ...

9
shlomi33

Ja, Sie können die Abfragemethode in Spring Data sortieren.

Bsp: aufsteigende oder absteigende Reihenfolge mit dem Wert des Feldes id.

Code:

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

alternative Lösung:

    @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"));
}
}

Spring Data Sorting: Sortierung

2

In diesem Beispiel versuche ich, Ihnen ein vollständiges Beispiel für die Personalisierung Ihrer OrderBy-Sortierungen zu zeigen

 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);
 }

sie werden dieses Beispiel verwenden: Eine Methode zum dynamischen Erstellen eines Objekts, das die Instanz von 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