Spring-Data-Repositories und Abfragemethoden
Erweitern Sie JpaRepository, definieren Sie Abfragemethoden nach Namenskonventionen und verwenden Sie @Query für eigenes JPQL.
Spring-Data-Repositories und Abfragemethoden ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Spring-Data-JPA-Repositories
Erweitern Sie JpaRepository<Entity, ID>, um kostenlos CRUD-, Paging- und Sortiermethoden zu erhalten. Spring generiert die Implementierung beim Start – SQL oder DAO-Boilerplate ist nicht erforderlich.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Abgeleitete Query-Methoden
Spring Data generiert Queries aus Methodennamen. Die Namenskonvention lautet: findBy + Property + optionale Bedingungen.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByStatus(UserStatus status);
Optional<User> findByEmail(String email);
List<User> findByAgeGreaterThanAndStatusOrderByNameAsc(int age, UserStatus s);
boolean existsByEmail(String email);
long countByStatus(UserStatus status);
}Unterstützte Schlüsselwörter in Methodennamen
Wichtige Schlüsselwörter für die Benennung: And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy, First/Top.
List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);@Query für benutzerdefiniertes JPQL
Verwenden Sie @Query für komplexe Queries, die sich nicht als Methodenname ausdrücken lassen. JPQL verwendet Entity-Klassennamen und Felder, nicht Tabellen- oder Spaltennamen.
@Query("SELECT u FROM User u WHERE u.email = :email AND u.status = :status")
Optional<User> findActiveByEmail(@Param("email") String email,
@Param("status") UserStatus status);
@Query("SELECT u.name, COUNT(o) FROM User u JOIN u.orders o GROUP BY u.name")
List<Object[]> countOrdersPerUser();Native Queries
Verwenden Sie nativeQuery = true, um direktes SQL zu schreiben. Dies ist nützlich für datenbankspezifische Funktionen wie ON CONFLICT, Window Functions oder die Volltextsuche.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);Ändernde Queries mit @Modifying
Annotieren Sie Update-/Delete-Queries mit @Modifying. Fügen Sie @Transactional hinzu, da ändernde Queries eine aktive Transaktion erfordern.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Abgeleitete Delete-Methoden
Spring Data generiert auch Delete-Queries aus Methodennamen – praktisch für Bereinigungsoperationen.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Repository-Schnittstellen: CrudRepository, PagingAndSortingRepository
Verwenden Sie schlankere Basisschnittstellen, wenn Sie nicht alle Methoden von JpaRepository benötigen. CrudRepository bietet grundlegende CRUD-Funktionen; PagingAndSortingRepository ergänzt findAll(Pageable).
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}@EntityGraph zur Optimierung des Fetchings
Verwenden Sie @EntityGraph, um die standardmäßige Fetch-Strategie für einzelne Queries zu überschreiben und Beziehungen eager zu laden, ohne das Entity-Mapping zu ändern.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Benutzerdefinierte Repository-Implementierungen
Fügen Sie eine benutzerdefinierte Methode hinzu, indem Sie eine Schnittstelle und eine Impl-Klasse nach der Namenskonvention UserRepositoryCustom + UserRepositoryCustomImpl erstellen. Spring führt sie zusammen.
public interface UserRepositoryCustom {
List<User> searchByCriteria(UserSearchCriteria criteria);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext EntityManager em;
public List<User> searchByCriteria(UserSearchCriteria c) {
// use Criteria API or JdbcTemplate
}
}
public interface UserRepository extends JpaRepository<User,Long>, UserRepositoryCustom {}Schnelltest
Welche Annotation ist neben @Query für UPDATE-/DELETE-Anweisungen erforderlich?
Zusammenfassung
Erweitern Sie JpaRepository, um CRUD-Funktionen kostenlos zu erhalten. Verwenden Sie abgeleitete Methodennamen für einfache Queries. Verwenden Sie @Query für komplexes JPQL oder natives SQL. Verwenden Sie @Modifying+@Transactional für Updates. Mit @EntityGraph können Sie das Fetching optimieren.
Häufig gestellte Fragen
Ist die Lektion „Spring-Data-Repositories und Abfragemethoden“ kostenlos?
Ja — der vollständige Text von „Spring-Data-Repositories und Abfragemethoden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Spring-Data-Repositories und Abfragemethoden“?
Erweitern Sie JpaRepository, definieren Sie Abfragemethoden nach Namenskonventionen und verwenden Sie @Query für eigenes JPQL. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Spring-Data-Repositories und Abfragemethoden“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Entity-Mapping mit JPA-Annotationen
- Spring-Data-Repositories und Abfragemethoden
- One-to-Many- und Many-to-Many-Beziehungen
- Seitennummerierung, Sortierung und Projektionen