Java Academy · Lektion

Spring Data-repositorier og query-metoder

Udvid JpaRepository, definér query-metoder efter navngivningskonventioner, og brug @Query til brugerdefineret JPQL.

Lektion 2 af 412 trin

Spring Data-repositorier og query-metoder er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Spring Data JPA-repositorier

Udvid JpaRepository<Entity, ID> for gratis at få CRUD-, sideinddelings- og sorteringsmetoder. Spring genererer implementeringen ved opstart – ingen SQL eller DAO-standardkode kræves.

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

Afledte forespørgselsmetoder

Spring Data genererer forespørgsler ud fra metodenavne. Navngivningskonventionen er: findBy + egenskab + 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);
}

Understøttede nøgleord i metodenavne

Vigtige nøgleord til 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 til tilpasset JPQL

Brug @Query til komplekse forespørgsler, der ikke kan udtrykkes som metodenavne. JPQL bruger entitetsklassenavne og felter, ikke tabel- eller kolonnenavne.

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

Forespørgsler med rå SQL

Brug nativeQuery = true til at skrive rå SQL. Det er nyttigt til databasespecifikke funktioner som ON CONFLICT, vinduesfunktioner eller fuldtekstsøgning.

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

Ændring af forespørgsler med @Modifying

Annotér opdaterings- og sletteforespørgsler med @Modifying. Tilføj @Transactional, da ændrende forespørgsler 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);

Afledte slettemetoder

Spring Data genererer også sletteforespørgsler ud fra metodenavne – praktisk til oprydning.

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

Repository-udsnit: CrudRepository, PagingAndSortingRepository

Brug smallere basisgrænseflader, når du ikke har brug for alle metoderne i JpaRepository. CrudRepository har grundlæggende CRUD; PagingAndSortingRepository tilføjer findAll(Pageable).

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

@EntityGraph til optimering af hentning

Brug @EntityGraph til at tilsidesætte standardstrategien for hentning pr. forespørgsel, så tilknyttede entiteter indlæses på forhånd uden at ændre entitetstilknytningen.

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

Tilpassede repository-implementeringer

Tilføj en tilpasset metode ved at oprette en grænseflade og en impl-klasse med navngivningskonventionen UserRepositoryCustom + UserRepositoryCustomImpl. Spring fletter 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 {}

Hurtigt tjek

Hvilken annotering kræves sammen med @Query til UPDATE-/DELETE-sætninger?

Opsummering

Udvid JpaRepository for gratis CRUD. Brug afledte metodenavne til simple forespørgsler. Brug @Query til komplekse JPQL- eller databasespecifikke SQL-forespørgsler. Brug @Modifying+@Transactional til opdateringer. Brug @EntityGraph til at finjustere hentning.

Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Spring Data-repositorier og query-metoder” gratis?

Ja — hele teksten til “Spring Data-repositorier og query-metoder” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Spring Data-repositorier og query-metoder”?

Udvid JpaRepository, definér query-metoder efter navngivningskonventioner, og brug @Query til brugerdefineret JPQL. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Spring Data-repositorier og query-metoder”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Entitetsmapping med JPA-annoteringer
  2. Spring Data-repositorier og query-metoder
  3. One-to-many- og many-to-many-relationer
  4. Sideinddeling, sortering og projektioner
← Tilbage til Java Academy