Kotlin Academy · Oppitunti

CRUD Query DSL:llä: insert, select, update, delete

Suorittakaa kaikki CRUD-operaatiot Exposedin tyyppiturvallisella kysely-DSL:llä.

Oppitunti 3/413 vaihetta

CRUD Query DSL:llä: insert, select, update, delete on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Kysely-DSL:n yleiskatsaus

Exposedin Query DSL:n avulla voitte kirjoittaa tyyppiturvallisia SQL-operaatioita Kotlin-funktioilla. Kaikki operaatiot suoritetaan transaction { } -lohkon sisällä. Taikamerkkijonoja ei käytetä: sarakeviittaukset ovat Kotlinin ominaisuuksia, joten kirjoitusvirheet havaitaan käännöksen aikana.

Lisääminen

Lisätkää rivi käyttämällä Table.insert { } -funktiota. Lambda saa parametrikseen InsertStatement-olion, ja sarakearvot asetetaan [column]-operaattorilla:

transaction {
    Users.insert {
        it[Users.name]  = "Alice"
        it[Users.email] = "alice@example.com"
        it[Users.age]   = 30
    }
}

Lisääminen ja luodun tunnisteen hakeminen

Hakekaa automaattisesti luotu perusavain lisäyksen jälkeen käyttämällä insertAndGetId { } -funktiota IdTable-taululla:

val newId: Long = transaction {
    Users.insertAndGetId {
        it[Users.name]  = "Bob"
        it[Users.email] = "bob@example.com"
    }.value
}

Erämuotoinen lisääminen

Käyttäkää tehokkaisiin usean rivin lisäyksiin funktiota batchInsert(list) { item -> ... }. Exposed käsittelee ne yhtenä valmisteltuna lausekkeena:

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
    }
}

Kaikkien rivien valitseminen

Hakekaa kaikki rivit käyttämällä Table.selectAll()-funktiota. Käykää tulos läpi ResultRow-olioiden sekvenssinä ja käyttäkää sarakearvoja muodossa row[Column]:

transaction {
    Users.selectAll().forEach { row ->
        println("${row[Users.id]}: ${row[Users.name]}")
    }
}

Valitseminen WHERE-ehdon avulla

Suodattakaa rivejä ketjuttamalla .where { condition } (Exposed 0.46+) tai .select { condition } -funktio. Ehdot käyttävät operaattorien ylikuormituksia, kuten eq, like ja greater:

transaction {
    Users.selectAll()
        .where { Users.age greater 25 }
        .forEach { println(it[Users.name]) }
}

Tiettyjen sarakkeiden valitseminen

Välittäkää sarakeluettelo funktiolle .select(col1, col2), jotta haette vain kyseiset sarakkeet – tämä vastaa kyselyä 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)
}

Päivittäminen

Muokatkaa olemassa olevia rivejä käyttämällä Table.update({ condition }) { } -funktiota. Sisempi lambda saa parametrikseen UpdateStatement-olion; asettakaa uudet arvot [column]-operaattorilla:

transaction {
    Users.update({ Users.id eq 1L }) {
        it[Users.name] = "Alice Updated"
        it[Users.age]  = 31
    }
}

Poistaminen

Poistakaa predikaattia vastaavat rivit käyttämällä Table.deleteWhere { condition } -funktiota. Se palauttaa poistettujen rivien määrän:

transaction {
    val deleted = Users.deleteWhere { Users.id eq 5L }
    println("Deleted $deleted rows")
}

Järjestäminen ja rajoittaminen

Järjestäkää ja sivuttakaa tuloksia ketjuttamalla funktiot .orderBy(column to SortOrder.ASC) ja .limit(n) (valinnaisen offset-siirtymän kanssa):

transaction {
    Users.selectAll()
        .orderBy(Users.name to SortOrder.ASC)
        .limit(10, offset = 20)
        .map { it[Users.name] }
        .forEach(::println)
}

Koostefunktiot ja lukumäärä

Käyttäkää Exposedin sarakeoperaattoreiden kautta tavallisia SQL-koostefunktioita, kuten Users.id.count(), Users.age.avg() ja Users.age.max():

transaction {
    val total = Users.selectAll().count()
    println("Total users: $total")
}

Pikatarkistus

Mikä Exposed-funktio palauttaa automaattisesti luodun perusavaimen, kun rivi lisätään IdTable-tauluun?

Yhteenveto: CRUD Query DSL:n avulla

Keskeiset opit:

  • insert { } — lisää rivin; insertAndGetId { } — lisää rivin ja palauttaa PK:n
  • selectAll().where { } — tekee suodatetun kyselyn; ketjuta mukaan .orderBy() ja .limit()
  • update({ condition }) { } — muokkaa rivejä; deleteWhere { } — poistaa rivejä
  • Kaikki operaatiot suoritetaan transaction { }-lohkossa
  • Sarakkeisiin viitataan käännösaikana turvallisesti — merkkijonomuotoisia sarakkeiden nimiä ei tarvita
Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”CRUD Query DSL:llä: insert, select, update, delete” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “CRUD Query DSL:llä: insert, select, update, delete”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”CRUD Query DSL:llä: insert, select, update, delete”?

Suorittakaa kaikki CRUD-operaatiot Exposedin tyyppiturvallisella kysely-DSL:llä. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”CRUD Query DSL:llä: insert, select, update, delete”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?

Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Exposedin määritys: tietokantayhteys ja Transaction DSL
  2. Taulujen määrittäminen Table DSL:llä
  3. CRUD Query DSL:llä: insert, select, update, delete
  4. Exposed DAO: entiteettiluokat ja suhteet
← Takaisin: Kotlin Academy