Mendefinisikan Tabel dengan DSL Table
Definisikan skema tabel bertipe dengan kolom, kunci utama, dan kunci asing.
Mendefinisikan Tabel dengan DSL Table adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Objek Tabel Exposed
Dalam Exposed, tabel basis data direpresentasikan sebagai object tunggal Kotlin yang memperluas Table (DSL Kueri) atau IntIdTable/LongIdTable/UUIDTable (lapisan DAO). Definisi kolom adalah properti Kotlin.
Definisi Tabel Dasar
Perluas Table dan tentukan kolom menggunakan fungsi pabrik kolom bawaan:
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 Kolom
Exposed menyediakan fungsi pabrik untuk jenis SQL umum:
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)
Kolom yang Dapat Bernilai Null
Panggil .nullable() pada kolom apa pun agar dapat menerima nilai NULL. Jenis Kotlin menjadi dapat bernilai null (String? alih-alih 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 Bawaan
Gunakan .default(value) untuk nilai bawaan dari Kotlin (diterapkan sebelum penyisipan) atau .defaultExpression(expr) untuk nilai bawaan SQL dari basis 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 Batasan Unik
Panggil .index() untuk indeks biasa atau .uniqueIndex() untuk indeks unik secara langsung pada kolom. Untuk indeks gabungan, gunakan fungsi index() pada tabel:
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 mendeklarasikan batasan kunci asing antarkolom. Teruskan kolom yang dirujuk serta tindakan onDelete dan onUpdate secara opsional:
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 tabel ID bertipe, bukan Table biasa:
IntIdTable("name")— kunci utamaIntyang naik otomatis dan bernamaidLongIdTable("name")— kunci utamaLongyang naik otomatisUUIDTable("name")— kunci utama UUID
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
}Kunci Utama Gabungan
Tentukan kunci utama gabungan dengan meneruskan beberapa kolom ke 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)
}Kolom Enumerasi
Simpan nilai enumerasi Kotlin sebagai string atau nilai 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)
}Menerapkan Perubahan Skema
Panggil SchemaUtils.createMissingTablesAndColumns() untuk menambahkan tabel dan kolom yang belum ada tanpa menghapus data yang sudah ada — migrasi yang aman untuk pengembangan. Untuk produksi, gunakan alat migrasi seperti Flyway atau Liquibase.
transaction {
SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}Pemeriksaan Singkat
Bagaimana cara mendeklarasikan kunci asing dari Posts.authorId ke Users.id dalam DSL Tabel Exposed?
Ringkasan: Mendefinisikan Tabel dengan DSL Tabel
Inti pembelajaran:
- Tabel adalah
objectyang memperluasTable,LongIdTable, dan sebagainya - Kolom:
varchar,integer,long,bool,datetime,uuid, dan sebagainya .nullable(),.default(),.uniqueIndex(), dan.references()mengubah kolom- Kunci utama gabungan:
PrimaryKey(col1, col2) - Terapkan skema dengan
SchemaUtils.create()ataucreateMissingTablesAndColumns()
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendefinisikan Tabel dengan DSL Table” gratis?
Ya — teks lengkap “Mendefinisikan Tabel dengan DSL Table” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mendefinisikan Tabel dengan DSL Table”?
Definisikan skema tabel bertipe dengan kolom, kunci utama, dan kunci asing. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mendefinisikan Tabel dengan DSL Table” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi
- Mendefinisikan Tabel dengan DSL Table
- CRUD dengan DSL Query: insert, select, update, delete
- DAO Exposed: Class Entitas dan Relasi