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?

7voto

S. FRAJ Punkte 91

Ich versuche in diesem Beispiel, Ihnen ein vollständiges Beispiel zu zeigen, um Ihre OrderBy-Sortierungen anzupassen

 import java.util.List;
 import org.springframework.data.domain.Page;

 import org.springframework.stereotype.Repository;
 import org.springframework.data.domain.Sort;
 /**
 * Spring Data-Repository für die Benutzerentität.
 */
 @SuppressWarnings("unused")
 @Repository
 public interface UserRepository extends JpaRepository {
 List  findAllWithCustomOrderBy(Sort sort);
 }

Sie werden dieses Beispiel verwenden: Eine Methode zum dynamischen Erstellen eines Objekts, das eine Instanz von Sort ist:

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

       String[] orderBySortedArray = {"name", "firstName"};
       System.out.println("Standard Sortierung ,\"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);
        }
}

4voto

khocef Punkte 135

Für Spring Boot 3 sollte Ihr Repository das JpaRepository implementieren und Sie sollten die Sortierung wie folgt definieren:

Sort sortBy = Sort.by(Sort.Direction.DESC, "id");

Um es zu verwenden:

repository.findAll(sortBy);

1voto

J.Wincewicz Punkte 620

Indem Sie alle oben genannten Antworten kombinieren, können Sie mit BaseEntity wiederverwendbaren Code schreiben:

@Data
@NoArgsConstructor
@MappedSuperclass
public abstract class BaseEntity {

  @Transient
  public static final Sort SORT_BY_CREATED_AT_DESC = 
                        Sort.by(Sort.Direction.DESC, "createdAt");

  @Id
  private Long id;
  private LocalDateTime createdAt;
  private LocalDateTime updatedAt;

  @PrePersist
  void prePersist() {
    this.createdAt = LocalDateTime.now();
  }

  @PreUpdate
  void preUpdate() {
    this.updatedAt = LocalDateTime.now();
  }
}

Das DAO-Objekt überlädt die Methode findAll - verwendet im Grunde immer noch findAll()

public interface StudentDAO extends CrudRepository {

  Iterable findAll(Sort sort);

}

StudentEntity erweitert BaseEntity, der wiederholbare Felder enthält (vielleicht möchten Sie auch nach ID sortieren)

@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
class StudentEntity extends BaseEntity {

  String firstName;
  String surname;

}

Schließlich der Service und die Verwendung von SORT_BY_CREATED_AT_DESC, die wahrscheinlich nicht nur im StudentService verwendet werden wird.

@Service
class StudentService {

  @Autowired
  StudentDAO studentDao;

  Iterable findStudents() {
    return this.studentDao.findAll(SORT_BY_CREATED_AT_DESC);
  }
}

1voto

Vikcen Punkte 83
Sort sortBy = Sort.by(new Sort.Order(Sort.Direction.ASC, "name").ignoreCase());

repository.findAll(sortBy);

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