Dynamiska frågor med Specifications
Bygg flexibla frågor programmatiskt.
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/oroch lägg till villkorat - Kombinera med
Pageableför filtrerade sidor
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
- Dynamiska frågor med Specifications
- Projektioner och DTO:er
- Granskning med @CreatedDate
- Paginering och sortering