Spring Boot 4-mikrotjänster och REST API:er · Lektion

Dynamiska frågor med Specifications

Bygg flexibla frågor programmatiskt.

Lektion 1 av 413 steg

Dynamiska frågor med Specifications är en gratis lektion i Spring Boot 4-mikrotjänster och REST API:er på CoddyKit. Detta är lektion 1 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 Spring Boot 4-mikrotjänster och REST API:er, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.

Problemet med statiska frågor

När användare kan filtrera efter många valfria fält blir det snabbt ohanterligt att skriva en frågemetod för varje kombination.

Med Spring Datas Specifications kan Ni bygga frågor dynamiskt under körning, baserat på vilka filter som har angetts.

JpaSpecificationExecutor

Utöka ert repository med JpaSpecificationExecutor för att aktivera Specification-baserade frågor.

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

En Specification

En Specification<T> beskriver ett enskilt WHERE-predikat med JPA Criteria API.

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

Köra en Specification

Skicka specen till findAll.

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

Kombinera med and

Specifications kan kombineras med and, or och not.

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

Bygga villkorat

Den verkliga styrkan är att bara lägga till predikat när filtret har angetts.

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- och jämförelsepredikat

Criteria-byggaren erbjuder många typer av predikat.

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

Koppla samman relaterade entiteter

Specifications kan navigera genom joins för att filtrera på associerade entiteter.

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

Specifications med sidindelning

Kombinera en Specification med en Pageable för filtrerade resultat med sidindelning.

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

Räkna matchningar

count accepterar också en Specification.

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

Återanvända predikatfabriker

Samla spec-fabriker i en hjälparklass så att de kan återanvändas och enhetstestas.

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

Snabbkontroll

Testa hur väl Ni har förstått Specifications.

Sammanfattning

Ni har lärt Er att skapa dynamiska frågor:

  • Utöka JpaSpecificationExecutor
  • En Specification är ett Criteria-predikat
  • Kombinera med and/or och lägg till villkorat
  • Kombinera med Pageable för filtrerade sidor
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
24
Lektioner
93

Vanliga frågor

Är lektionen ”Dynamiska frågor med Specifications” gratis?

Ja – hela texten till ”Dynamiska frågor med Specifications” 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 Spring Boot 4-mikrotjänster och REST API:er, kan Ni uppgradera till CoddyKit PRO. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.

Vad lär jag mig i ”Dynamiska frågor med Specifications”?

Bygg flexibla frågor programmatiskt. Ni övar på Spring Boot 4-mikrotjänster och REST API:er 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 Spring Boot 4-mikrotjänster och REST API:er?

Du behöver inga förkunskaper. Utbildningen i Spring Boot 4-mikrotjänster och REST API:er 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 1 av 4.

Hur lång tid tar lektionen ”Dynamiska frågor med Specifications”?

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 Spring Boot 4-mikrotjänster och REST API:er-lektionen?

Ja. Varje Spring Boot 4-mikrotjänster och REST API:er-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. Dynamiska frågor med Specifications
  2. Projektioner och DTO:er
  3. Granskning med @CreatedDate
  4. Paginering och sortering
← Tillbaka till Spring Boot 4-mikrotjänster och REST API:er