Spring Data-repositorier och frågemetoder
Utöka JpaRepository, definiera frågemetoder enligt namngivningskonventioner och använd @Query för anpassad JPQL.
Spring Data-repositorier och frågemetoder är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.
Spring Data JPA-repositorier
Utöka JpaRepository<Entity, ID> för att få CRUD-, sidindelnings- och sorteringsmetoder utan extra arbete. Spring genererar implementationen vid uppstart – ingen SQL- eller DAO-standardkod krävs.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Härledda frågemetoder
Spring Data genererar frågor från metodnamn. Namngivningskonventionen följer: findBy + property + valfria villkor.
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);
}Nyckelord som stöds i metodnamn
Viktiga nyckelord för namngivning: 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 anpassad JPQL
Använd @Query för komplexa frågor som inte kan uttryckas som metodnamn. JPQL använder entitetsklassnamn och fält, inte tabell- eller kolumnnamn.
@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();Nativa frågor
Använd nativeQuery = true för att skriva rå SQL. Det är användbart för databasspecifika funktioner som ON CONFLICT, fönsterfunktioner eller fulltextsökning.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);Ändringsfrågor med @Modifying
Annotera uppdaterings- och borttagningsfrågor med @Modifying. Lägg till @Transactional eftersom ändringsfrågor kräver en aktiv transaktion.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Härledda borttagningsmetoder
Spring Data genererar även borttagningsfrågor från metodnamn – praktiskt för rensningsåtgärder.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Repository-delgränssnitt: CrudRepository, PagingAndSortingRepository
Använd smalare basgränssnitt när ni inte behöver alla metoder i JpaRepository. CrudRepository innehåller grundläggande CRUD; PagingAndSortingRepository lägger till findAll(Pageable).
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}@EntityGraph för optimerad hämtning
Använd @EntityGraph för att åsidosätta den förvalda hämtningsstrategin per fråga och läsa in associationer direkt utan att ändra entitetsmappningen.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Anpassade repository-implementationer
Lägg till en anpassad metod genom att skapa ett gränssnitt och en implementation med namngivningskonventionen UserRepositoryCustom + UserRepositoryCustomImpl. Spring sammanfogar dem.
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 {}Snabbkontroll
Vilken annotering krävs tillsammans med @Query för UPDATE/DELETE-satser?
Sammanfattning
Utöka JpaRepository för att få CRUD utan extra arbete. Använd härledda metodnamn för enkla frågor. Använd @Query för komplex JPQL eller nativ SQL. Använd @Modifying+@Transactional för uppdateringar. Använd @EntityGraph för att finjustera hämtningen.
Lär dig Java med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 104
- Lektioner
- 374
Vanliga frågor
Är lektionen ”Spring Data-repositorier och frågemetoder” gratis?
Ja – hela texten till ”Spring Data-repositorier och frågemetoder” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Spring Data-repositorier och frågemetoder”?
Utöka JpaRepository, definiera frågemetoder enligt namngivningskonventioner och använd @Query för anpassad JPQL. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Java Academy?
Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Spring Data-repositorier och frågemetoder”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Java Academy-lektionen?
Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Entitetsmappning med JPA-annotationer
- Spring Data-repositorier och frågemetoder
- En-till-många- och många-till-många-relationer
- Paginering, sortering och projektioner