Spring Boot 4-mikrotjenester og REST-API'er · Lektion

Dynamiske queries med specifications

Byg fleksible queries programmatisk.

Lektion 1 af 413 trin

Dynamiske queries med specifications er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 1 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 Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Problemet med statiske forespørgsler

Når brugere kan filtrere efter mange valgfrie felter, vokser antallet af forespørgselsmetoder for hver kombination hurtigt eksplosivt.

Spring Data Specifications lader dig opbygge forespørgsler dynamisk under kørsel baseret på, hvilke filtre der er angivet.

JpaSpecificationExecutor

Udvid dit repository med JpaSpecificationExecutor for at aktivere forespørgsler baseret på Specification.

public interface UserRepository
    extends JpaRepository<User, Long>,
            JpaSpecificationExecutor<User> {
}

En Specification

En Specification<T> beskriver et enkelt WHERE-prædikat ved hjælp af JPA Criteria API.

Specification<User> hasName(String name) {
    return (root, query, cb) ->
        cb.equal(root.get("name"), name);
}

Udførelse af en Specification

Giv specifikationen til findAll.

List<User> users =
    userRepository.findAll(hasName("Alice"));

Kombination med and

Specifications kan kombineres med and, or og not.

Specification<User> spec =
    hasName("Alice").and(isActive(true));
List<User> users = userRepository.findAll(spec);

Betinget opbygning

Den virkelige styrke er, at du kun tilføjer prædikater, når filteret er angivet.

Specification<User> spec = Specification.where(null);
if (name != null) {
    spec = spec.and(hasName(name));
}
if (active != null) {
    spec = spec.and(isActive(active));
}
return userRepository.findAll(spec);

Like- og sammenligningsprædikater

Criteria-builderen tilbyder mange typer prædikater.

Specification<User> nameLike(String part) {
    return (root, query, cb) ->
        cb.like(root.get("name"), "%" + part + "%");
}

Specification<User> olderThan(int age) {
    return (root, query, cb) ->
        cb.greaterThan(root.get("age"), age);
}

Join af relaterede entiteter

Specifications kan navigere gennem joins for at filtrere efter tilknyttede entiteter.

Specification<User> inCity(String city) {
    return (root, query, cb) ->
        cb.equal(root.join("address").get("city"), city);
}

Specifications med sideinddeling

Kombiner en Specification med en Pageable for at få filtrerede resultater opdelt i sider.

Page<User> page = userRepository.findAll(
    spec, PageRequest.of(0, 20));

Optælling af match

count accepterer også en Specification.

long matches = userRepository.count(hasName("Alice"));

Genbrug af prædikatfabrikker

Saml fabrikker til specifications i en hjælpeklasse, så de kan genbruges og enhedstestes.

public class UserSpecs {
    public static Specification<User> active() {
        return (root, q, cb) ->
            cb.isTrue(root.get("active"));
    }
}

Hurtig kontrol

Test din forståelse af Specifications.

Opsummering

Du har lært dynamiske forespørgsler:

  • Udvid JpaSpecificationExecutor
  • En Specification er ét Criteria-prædikat
  • Kombiner med and/or, og tilføj betinget
  • Kombiner med Pageable for at få filtrerede sider
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
24
Lektioner
93

Ofte stillede spørgsmål

Er lektionen “Dynamiske queries med specifications” gratis?

Ja — hele teksten til “Dynamiske queries med specifications” 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 Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Dynamiske queries med specifications”?

Byg fleksible queries programmatisk. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er 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å Spring Boot 4-mikrotjenester og REST-API'er?

Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er 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 1 af 4.

Hvor lang tid tager lektionen “Dynamiske queries med specifications”?

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 Spring Boot 4-mikrotjenester og REST-API'er-lektion?

Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-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. Dynamiske queries med specifications
  2. Projections og DTO'er
  3. Auditing med @CreatedDate
  4. Paginering og sortering
← Tilbage til Spring Boot 4-mikrotjenester og REST-API'er