Zapytania i relacje
Wykonuj zapytania dotyczące danych i łącz encje
Zapytania i relacje to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Poza pojedynczą tabelę
Rzeczywiste aplikacje zawierają powiązane dane: użytkownik ma wiele postów, a zamówienie ma wiele pozycji. Room modeluje takie zależności za pomocą kluczy obcych i adnotacji @Relation.
Zapytania sparametryzowane
Przekazuj argumenty do @Query, używając prefiksu dwukropka.
@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>Zwracanie wartości agregujących
Zapytania mogą zwracać wartości skalarne, takie jak liczby elementów.
@Query("SELECT COUNT(*) FROM users")
suspend fun count(): IntDefiniowanie klucza obcego
Encja podrzędna odwołuje się do nadrzędnej za pomocą @ForeignKey. Wymusza to integralność referencyjną na poziomie bazy danych.
@Entity(
foreignKeys = [ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"]
)]
)
data class Post(
@PrimaryKey val id: Int,
val userId: Int,
val title: String
)Indeksowanie kluczy obcych
Room zaleca indeksowanie kolumn kluczy obcych w celu zwiększenia wydajności zapytań. Dodaj adnotację @Index.
@Entity(
indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)Zachowanie onDelete
Zdecyduj, co stanie się z elementami podrzędnymi po usunięciu elementu nadrzędnego, na przykład użyj CASCADE, aby również je usunąć.
ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"],
onDelete = ForeignKey.CASCADE
)Modelowanie relacji jeden-do-wielu
Utwórz klasę, która łączy element nadrzędny z jego elementami podrzędnymi za pomocą @Embedded i @Relation.
data class UserWithPosts(
@Embedded val user: User,
@Relation(
parentColumn = "id",
entityColumn = "userId"
)
val posts: List<Post>
)Wykonywanie zapytań dotyczących relacji
Zwróć połączoną klasę z DAO. Room wykona dodatkowe zapytanie i połączy obiekty.
@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>Dlaczego tutaj @Transaction
Ponieważ Room wykonuje dwa zapytania (najpierw dotyczące elementów nadrzędnych, a następnie podrzędnych), opakowanie metody w @Transaction zapewnia spójny obraz danych bez przeplatanych zapisów.
Relacja wiele-do-wielu z tabelą pośrednią
W przypadku relacji wiele-do-wielu (studentów i kursów) należy użyć tabeli pośredniej oraz parametru associateBy adnotacji @Relation.
@Relation(
parentColumn = "studentId",
entityColumn = "courseId",
associateBy = Junction(Enrollment::class)
)
val courses: List<Course>Podsumowanie relacji
@ForeignKeywymusza integralność i reguły kaskadowe.@Relation+@Embeddedskładają powiązane obiekty.@Transactionzapewnia spójność odczytów obejmujących wiele zapytań.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat relacji.
Powtórzenie
Uczestnik nauczył się:
- Parametryzować zapytania za pomocą
:namei zwracać agregaty. @ForeignKeywymusza integralność za pomocą regułonDelete.@Relation+@Embeddedtworzą powiązane obiekty; odczyty należy opakowywać w@Transaction.
Często zadawane pytania
Czy lekcja „Zapytania i relacje” jest bezpłatna?
Tak — pełny tekst „Zapytania i relacje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zapytania i relacje”?
Wykonuj zapytania dotyczące danych i łącz encje Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Zapytania i relacje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Encje i DAO
- Klasa bazy danych Room
- Zapytania i relacje
- Obserwowanie danych za pomocą Flow