0Pricing
Kotlin Academy · Lekcja

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 PK
  • selectAll().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

  1. Konfiguracja Exposed: połączenie z bazą danych i DSL transakcji
  2. Definiowanie tabel za pomocą DSL Table
  3. CRUD z DSL zapytań: insert, select, update, delete
  4. Exposed DAO: klasy encji i relacje
← Powrót do Kotlin Academy