CRUD z DSL zapytań: insert, select, update, delete
Wykonuj wszystkie operacje CRUD za pomocą bezpiecznego typowo DSL zapytań Exposed.
CRUD z DSL zapytań: insert, select, update, delete to bezpłatna lekcja Kotlin 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 Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Przegląd DSL zapytań
DSL zapytań Exposed pozwala pisać bezpieczne typowo operacje SQL za pomocą funkcji Kotlinu. Wszystkie operacje są wykonywane wewnątrz bloku transaction { }. Nie ma tu magicznych ciągów znaków — odwołania do kolumn są właściwościami Kotlinu, więc literówki są wykrywane podczas kompilacji.
Wstawianie
Użyj Table.insert { }, aby dodać wiersz. Lambda otrzymuje obiekt InsertStatement, a wartości kolumn ustawiasz za pomocą operatora [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}Wstawianie i pobieranie wygenerowanego identyfikatora
Użyj insertAndGetId { } na obiekcie IdTable, aby po wstawieniu pobrać automatycznie wygenerowany klucz główny:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}Wstawianie zbiorcze
Użyj batchInsert(list) { item -> ... }, aby wydajnie wstawiać wiele wierszy. Exposed opakowuje je w pojedynczą instrukcję przygotowaną:
val newUsers = listOf("Carol" to "carol@e.com", "Dave" to "dave@e.com")
transaction {
Users.batchInsert(newUsers) { (name, email) ->
this[Users.name] = name
this[Users.email] = email
}
}Pobieranie wszystkich wierszy
Użyj Table.selectAll(), aby pobrać każdy wiersz. Iteruj po wyniku jako sekwencji obiektów ResultRow, a do wartości kolumn odwołuj się za pomocą row[Column]:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}Pobieranie z klauzulą WHERE
Połącz .where { condition } (Exposed 0.46+) lub .select { condition }, aby filtrować wiersze. Warunki wykorzystują przeciążenia operatorów (eq, like, greater itd.):
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}Pobieranie określonych kolumn
Przekaż listę kolumn do .select(col1, col2), aby pobrać tylko te kolumny — odpowiednik SELECT col1, col2 FROM ...:
transaction {
Users.select(Users.name, Users.email)
.where { Users.age lessEq 30 }
.map { it[Users.name] to it[Users.email] }
.forEach(::println)
}Aktualizowanie
Użyj Table.update({ condition }) { }, aby modyfikować istniejące wiersze. Wewnętrzna lambda otrzymuje obiekt UpdateStatement; użyj [column], aby ustawić nowe wartości:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}Usuwanie
Użyj Table.deleteWhere { condition }, aby usunąć wiersze spełniające predykat. Funkcja zwraca liczbę usuniętych wierszy:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}Sortowanie i ograniczanie wyników
Połącz .orderBy(column to SortOrder.ASC) i .limit(n) (opcjonalnie z offset), aby sortować wyniki i dzielić je na strony:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}Agregacje i zliczanie
Używaj standardowych funkcji agregujących SQL za pośrednictwem operatorów kolumn Exposed: Users.id.count(), Users.age.avg(), Users.age.max() itd.:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}Szybkie sprawdzenie
Która funkcja Exposed zwraca automatycznie wygenerowany klucz główny po wstawieniu wiersza do obiektu IdTable?
Podsumowanie: CRUD z użyciem Query DSL
Najważniejsze informacje:
insert { }— dodaje wiersz;insertAndGetId { }— dodaje wiersz i zwraca PKselectAll().where { }— wykonuje zapytanie z filtrem; można dodać łańcuchowo.orderBy(),.limit()update({ condition }) { }— modyfikuje wiersze;deleteWhere { }— usuwa wiersze- Wszystkie operacje są wykonywane wewnątrz
transaction { } - Odwołania do kolumn są bezpieczne na etapie kompilacji — bez nazw kolumn w postaci ciągów znaków
Często zadawane pytania
Czy lekcja „CRUD z DSL zapytań: insert, select, update, delete” jest bezpłatna?
Tak — pełny tekst „CRUD z DSL zapytań: insert, select, update, delete” 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „CRUD z DSL zapytań: insert, select, update, delete”?
Wykonuj wszystkie operacje CRUD za pomocą bezpiecznego typowo DSL zapytań Exposed. Ćwiczysz Kotlin 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ąć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin 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 „CRUD z DSL zapytań: insert, select, update, delete”?
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 Kotlin Academy?
Tak. Każda lekcja Kotlin 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
- Konfiguracja Exposed: połączenie z bazą danych i DSL transakcji
- Definiowanie tabel za pomocą DSL Table
- CRUD z DSL zapytań: insert, select, update, delete
- Exposed DAO: klasy encji i relacje