438 Stimmen

Wie man OrderBy mit findAll in Spring Data verwendet

Ich verwende Spring Data und mein DAO sieht wie folgt aus

public interface StudentDAO extends JpaRepository {
    public findAllOrderByIdAsc();   // Ich möchte so etwas verwenden
}

In dem obigen Code zeigt die kommentierte Zeile meine Absicht. Kann Spring Data eine integrierte Funktionalität bereitstellen, um eine Methode zu verwenden, um alle Datensätze nach einer Spalte mit ASC/DESC zu ordnen?

977voto

Sikor Punkte 11528
public interface StudentDAO extends JpaRepository {
    public List findAllByOrderByIdAsc();
}

The code above should work. I'm using something similar:

public List findTop10ByOrderByLevelDesc();

It returns 10 rows with the highest level.

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

findAllByOrderByIdAsc(); // nichts vergessen "by"
       ^

71voto

Paul Samsotha Punkte 197171

Nach meinem Kenntnisstand glaube ich nicht, dass dies mit einer direkten Methode mit Abfragenamen 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, der 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 findAll() {
        return studentDao.findAll(sortByIdAsc());
    }

    private Sort sortByIdAsc() {
        return new Sort(Sort.Direction.ASC, "id");
    }
}

64voto

Einfacher Weg:

repository.findAll(Sort.by(Sort.Direction.DESC, "colName"));

Quelle: https://www.baeldung.com/spring-data-sorting

17voto

shlomi33 Punkte 1372

Bitte werfen Sie einen Blick auf die Spring Data JPA - Referenzdokumentation, Abschnitt 5.3. Abfrage-Methoden, insbesondere auf den Abschnitt 5.3.2. Abfrageerstellung, in "Tabelle 3. Unterstützte Schlüsselwörter innerhalb von Methodennamen" (Links zum Stand 2019-05-03).

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

16voto

Narayan Yerrabachu Punkte 1576

Ja, Sie können mit der Query-Methode in Spring Data sortieren.

Zum Beispiel in aufsteigender oder absteigender Reihenfolge anhand des Werts des id-Felds.

Code:

  public interface StudentDAO extends JpaRepository {
    public findAllByOrderByIdAsc();   
}

Alternative Lösung:

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

    @Override
    public List 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: Sorting

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X