Java Academy · leksjon

Spring Data-repositorier og spørringsmetoder

Utvid JpaRepository, definer spørringsmetoder etter navnekonvensjoner og bruk @Query for egendefinert JPQL.

Leksjon 2 av 412 trinn

Spring Data-repositorier og spørringsmetoder er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Spring Data JPA-repositorier

Utvid JpaRepository<Entity, ID> for å få CRUD-, sideinndelings- og sorteringsmetoder uten ekstra arbeid. Spring genererer implementasjonen ved oppstart – det kreves verken SQL eller standardisert DAO-kode.

public interface UserRepository extends JpaRepository<User, Long> {
    // Free: findAll, findById, save, delete, count, existsById, etc.
}

Avledede spørringsmetoder

Spring Data genererer spørringer fra metodenavn. Navnekonvensjonen følger dette mønsteret: findBy + property + valgfrie betingelser.

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);
}

Støttede nøkkelord i metodenavn

Viktige nøkkelord for navngivning: 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 for egendefinert JPQL

Bruk @Query for komplekse spørringer som ikke kan uttrykkes som metodenavn. JPQL bruker entitetsklassenes navn og felter, ikke tabell- og kolonnenavn.

@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();

Innebygde spørringer

Bruk nativeQuery = true for å skrive rå SQL. Dette er nyttig for databasespesifikke funksjoner som ON CONFLICT, vindusfunksjoner eller fulltekstsøk.

@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
       nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);

Endringsspørringer med @Modifying

Annoter UPDATE-/DELETE-spørringer med @Modifying. Legg til @Transactional, siden endringsspørringer krever en aktiv transaksjon.

@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
                             @Param("cutoff") LocalDateTime cutoff);

Avledede slettemetoder

Spring Data genererer også slettespørringer fra metodenavn – praktisk for oppryddingsoperasjoner.

void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);

Repository-utvalg: CrudRepository, PagingAndSortingRepository

Bruk smalere basisgrensesnitt når De ikke trenger alle metodene i JpaRepository. CrudRepository har grunnleggende CRUD-operasjoner, mens PagingAndSortingRepository legger til findAll(Pageable).

public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
    // Only paging + sorting — no save/delete
}

@EntityGraph for optimalisering av henting

Bruk @EntityGraph for å overstyre standardstrategien for henting per spørring og laste inn relasjoner ivrig uten å endre entitetstilordningen.

@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);

Egendefinerte repository-implementasjoner

Legg til en egendefinert metode ved å opprette et grensesnitt og en implementasjonsklasse med navnekonvensjonen UserRepositoryCustom + UserRepositoryCustomImpl. Spring slår dem sammen.

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 {}

Hurtigsjekk

Hvilken annotasjon kreves sammen med @Query for UPDATE-/DELETE-setninger?

Oppsummering

Utvid JpaRepository for å få CRUD-operasjoner uten ekstra arbeid. Bruk avledede metodenavn for enkle spørringer. Bruk @Query for kompleks JPQL eller innebygd SQL. Bruk @Modifying+@Transactional for oppdateringer. Bruk @EntityGraph for å justere hentingen.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Spring Data-repositorier og spørringsmetoder» gratis?

Ja – hele teksten i «Spring Data-repositorier og spørringsmetoder» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Spring Data-repositorier og spørringsmetoder»?

Utvid JpaRepository, definer spørringsmetoder etter navnekonvensjoner og bruk @Query for egendefinert JPQL. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Spring Data-repositorier og spørringsmetoder»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Entitetsmapping med JPA-annotasjoner
  2. Spring Data-repositorier og spørringsmetoder
  3. Én-til-mange- og mange-til-mange-relasjoner
  4. Sideinndeling, sortering og projeksjoner
← Tilbake til Java Academy