Kotlin Academy · Pelajaran

Mentakrifkan Jadual dengan DSL Table

Takrifkan skema jadual bertaip dengan lajur, kunci utama dan kunci asing.

Pelajaran 2 daripada 413 langkah

Mentakrifkan Jadual dengan DSL Table ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Objek Jadual Exposed

Dalam Exposed, jadual pangkalan data diwakili oleh object tunggal Kotlin yang melanjutkan Table (DSL Pertanyaan) atau IntIdTable/LongIdTable/UUIDTable (lapisan DAO). Takrifan lajur ialah sifat Kotlin.

Definisi Jadual Asas

Luaskan Table dan tentukan lajur menggunakan fungsi kilang lajur terbina dalam:

import org.jetbrains.exposed.sql.Table

object Users : Table("users") {
    val id    = long("id").autoIncrement()
    val name  = varchar("name", 100)
    val email = varchar("email", 255).uniqueIndex()
    val age   = integer("age").nullable()

    override val primaryKey = PrimaryKey(id)
}

Jenis Lajur

Exposed menyediakan fungsi kilang untuk jenis SQL yang lazim:

  • integer("col"), long("col"), short("col")
  • varchar("col", length), text("col")
  • bool("col"), double("col"), decimal("col", precision, scale)
  • datetime("col"), date("col"), timestamp("col")
  • blob("col"), uuid("col"), binary("col", length)

Lajur dengan Nilai NULL

Panggil .nullable() pada mana-mana lajur untuk membenarkan nilai NULL. Jenis Kotlin menjadi boleh menerima nilai NULL (String? dan bukannya String):

object Products : Table("products") {
    val id          = long("id").autoIncrement()
    val name        = varchar("name", 200)
    val description = text("description").nullable()
    override val primaryKey = PrimaryKey(id)
}

Nilai Lalai

Gunakan .default(value) untuk nilai lalai pada pihak Kotlin (digunakan sebelum sisipan) atau .defaultExpression(expr) untuk nilai lalai SQL pada pihak pangkalan data:

object Orders : Table("orders") {
    val id        = long("id").autoIncrement()
    val status    = varchar("status", 20).default("PENDING")
    val createdAt = datetime("created_at")
        .defaultExpression(CurrentDateTime)
    override val primaryKey = PrimaryKey(id)
}

Indeks dan Kekangan Unik

Panggil .index() untuk indeks biasa atau .uniqueIndex() untuk indeks unik terus pada lajur. Untuk indeks komposit, gunakan fungsi index() pada Jadual:

object Articles : Table("articles") {
    val id    = long("id").autoIncrement()
    val title = varchar("title", 300).index()
    val slug  = varchar("slug", 300).uniqueIndex()
    override val primaryKey = PrimaryKey(id)
}

Kunci Asing

Gunakan .references() untuk mengisytiharkan kekangan kunci asing antara lajur. Hantar lajur yang dirujuk serta tindakan onDelete dan onUpdate secara pilihan:

object Posts : Table("posts") {
    val id       = long("id").autoIncrement()
    val authorId = long("author_id").references(Users.id, onDelete = ReferenceOption.CASCADE)
    val title    = varchar("title", 300)
    override val primaryKey = PrimaryKey(id)
}

Varian IdTable

Untuk lapisan DAO, gunakan jadual ID bertaip dan bukannya Table biasa:

  • IntIdTable("name") — kunci utama Int yang meningkat secara automatik dan dinamakan id
  • LongIdTable("name") — kunci utama Long yang meningkat secara automatik
  • UUIDTable("name") — kunci utama UUID
object Users : LongIdTable("users") {
    val name  = varchar("name", 100)
    val email = varchar("email", 255).uniqueIndex()
}

Kunci Utama Komposit

Tentukan kunci utama komposit dengan menghantar beberapa lajur kepada PrimaryKey():

object UserRoles : Table("user_roles") {
    val userId = long("user_id").references(Users.id)
    val roleId = long("role_id").references(Roles.id)
    override val primaryKey = PrimaryKey(userId, roleId)
}

Lajur Enumerasi

Simpan nilai enumerasi Kotlin sebagai rentetan atau ordinal menggunakan enumerationByName() atau enumeration():

enum class Status { ACTIVE, INACTIVE, BANNED }

object Users : LongIdTable("users") {
    val name   = varchar("name", 100)
    val status = enumerationByName<Status>("status", 20)
}

Menggunakan Perubahan Skema

Panggil SchemaUtils.createMissingTablesAndColumns() untuk menambah jadual dan lajur yang tiada tanpa menggugurkan data sedia ada — penghijrahan yang selamat untuk pembangunan. Untuk produksi, gunakan alat penghijrahan seperti Flyway atau Liquibase.

transaction {
    SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}

Semakan Ringkas

Bagaimanakah anda mengisytiharkan kunci asing daripada Posts.authorId kepada Users.id dalam DSL Jadual Exposed?

Rangkuman: Mentakrifkan Jadual dengan DSL Jadual

Perkara penting:

  • Jadual ialah object yang melanjutkan Table, LongIdTable dan sebagainya
  • Lajur: varchar, integer, long, bool, datetime, uuid dan sebagainya
  • .nullable(), .default(), .uniqueIndex() dan .references() mengubah suai lajur
  • Kunci utama komposit: PrimaryKey(col1, col2)
  • Gunakan skema dengan SchemaUtils.create() atau createMissingTablesAndColumns()
Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Mentakrifkan Jadual dengan DSL Table” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Mentakrifkan Jadual dengan DSL Table”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mentakrifkan Jadual dengan DSL Table”?

Takrifkan skema jadual bertaip dengan lajur, kunci utama dan kunci asing. Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Mentakrifkan Jadual dengan DSL Table” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Persediaan Exposed: Sambungan Pangkalan Data dan DSL Transaksi
  2. Mentakrifkan Jadual dengan DSL Table
  3. CRUD dengan DSL Pertanyaan: insert, select, update, delete
  4. DAO Exposed: Class Entiti dan Hubungan
← Kembali ke Kotlin Academy