Java Academy · Lektion

Spring Data-repositorier och frågemetoder

Utöka JpaRepository, definiera frågemetoder enligt namngivningskonventioner och använd @Query för anpassad JPQL.

Lektion 2 av 412 steg

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.

Gratis att börja

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

  1. Entitetsmappning med JPA-annotationer
  2. Spring Data-repositorier och frågemetoder
  3. En-till-många- och många-till-många-relationer
  4. Paginering, sortering och projektioner
← Tillbaka till Java Academy