Android Academy · Les

Queries en relaties

Query gegevens en leg relaties tussen entiteiten.

Les 3 van 413 stappen

Queries en relaties is een gratis Android Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Verder dan één tabel

Echte apps bevatten gerelateerde gegevens: een gebruiker heeft veel berichten en een bestelling heeft veel artikelen. Room modelleert dit met vreemde sleutels en de annotatie @Relation.

Geparametriseerde query's

Geef argumenten door aan een @Query met een dubbelepunt als voorvoegsel.

@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>

Aggregaten retourneren

Query's kunnen scalaire waarden retourneren, zoals aantallen.

@Query("SELECT COUNT(*) FROM users")
suspend fun count(): Int

Een vreemde sleutel definiëren

Een onderliggende entiteit verwijst met @ForeignKey naar de bovenliggende entiteit. Dit dwingt referentiële integriteit af op databaseniveau.

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["id"],
        childColumns = ["userId"]
    )]
)
data class Post(
    @PrimaryKey val id: Int,
    val userId: Int,
    val title: String
)

Vreemde sleutels indexeren

Room raadt aan kolommen met vreemde sleutels te indexeren voor betere queryprestaties. Voeg een @Index toe.

@Entity(
    indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)

Gedrag van onDelete

Bepaal wat er met onderliggende entiteiten gebeurt wanneer een bovenliggende entiteit wordt verwijderd, bijvoorbeeld CASCADE om ze ook te verwijderen.

ForeignKey(
    entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE
)

Een één-op-veelrelatie modelleren

Maak een klasse die een bovenliggende entiteit met de onderliggende entiteiten combineert met @Embedded en @Relation.

data class UserWithPosts(
    @Embedded val user: User,
    @Relation(
        parentColumn = "id",
        entityColumn = "userId"
    )
    val posts: List<Post>
)

De relatie opvragen

Retourneer de gecombineerde klasse vanuit een DAO. Room voert de extra query uit en voegt de objecten samen.

@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>

Waarom hier @Transaction

Omdat Room twee query's uitvoert (eerst de bovenliggende objecten en daarna de onderliggende), zorgt het omwikkelen van de methode met @Transaction voor een consistente momentopname zonder tussentijdse schrijfbewerkingen.

Veel-op-veelrelatie met een koppeltabel

Gebruik voor een veel-op-veelrelatie (studenten en cursussen) een koppeltabel en de parameter associateBy van @Relation.

@Relation(
    parentColumn = "studentId",
    entityColumn = "courseId",
    associateBy = Junction(Enrollment::class)
)
val courses: List<Course>

Samenvatting van relaties

  • @ForeignKey handhaaft integriteit en regels voor trapsgewijze bewerkingen.
  • @Relation + @Embedded stellen gerelateerde objecten samen.
  • @Transaction houdt leesbewerkingen met meerdere query's consistent.

Korte controle

Test je begrip van relaties.

Samenvatting

Je hebt geleerd:

  • Maak query's parametriseerbaar met :name en retourneer aggregaten.
  • @ForeignKey handhaaft integriteit met onDelete-regels.
  • @Relation + @Embedded bouwen gerelateerde objecten op; omwikkel leesbewerkingen met @Transaction.
Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “Queries en relaties” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “Queries en relaties”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “Queries en relaties”?

Query gegevens en leg relaties tussen entiteiten. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Queries en relaties”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Entiteiten en DAO's
  2. De Room-databaseklasse
  3. Queries en relaties
  4. Gegevens observeren met Flow
← Terug naar Android Academy