Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi
Hubungkan ke basis data, konfigurasikan Exposed, dan jalankan kode di dalam transaksi.
Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Exposed?
Exposed adalah kerangka kerja SQL ringan milik JetBrains untuk Kotlin. Exposed menawarkan dua tingkat: DSL Kueri (ekspresi SQL yang aman tipe) dan lapisan DAO (entitas bergaya Active Record). Keduanya berjalan di dalam transaksi eksplisit.
Menambahkan Dependensi Exposed
Tambahkan inti, jembatan driver JDBC, dan driver basis data Anda:
dependencies {
implementation("org.jetbrains.exposed:exposed-core:0.52.0")
implementation("org.jetbrains.exposed:exposed-jdbc:0.52.0")
implementation("org.jetbrains.exposed:exposed-dao:0.52.0")
implementation("com.h2database:h2:2.2.224") // or postgresql driver
implementation("com.zaxxer:HikariCP:5.1.0") // connection pooling
}Menghubungkan ke Basis Data
Panggil Database.connect() satu kali saat startup. Untuk produksi, teruskan HikariDataSource; untuk pengujian, URL JDBC sederhana sudah memadai:
import org.jetbrains.exposed.sql.Database
// Simple (dev/test)
Database.connect(
url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
driver = "org.h2.Driver"
)
// Production with HikariCP
Database.connect(HikariDataSource(HikariConfig().apply {
jdbcUrl = "jdbc:postgresql://localhost/mydb"
username = "user"
password = "pass"
maximumPoolSize = 10
}))Blok transaction { }
Semua operasi Exposed harus dijalankan di dalam blok transaction { }. Exposed mengonfirmasi transaksi jika berhasil dan membatalkannya jika ada pengecualian yang tidak tertangkap:
transaction {
// all DB operations here
SchemaUtils.create(Users)
}Transaksi yang Ramah terhadap Korutin
Gunakan newSuspendedTransaction { } dari exposed-r2dbc atau exposed-spring-boot-starter untuk transaksi yang kompatibel dengan korutin. Dalam Ktor, bungkus panggilan Exposed yang memblokir dalam withContext(Dispatchers.IO) { transaction { ... } }:
suspend fun findUser(id: Long): User? = withContext(Dispatchers.IO) {
transaction {
UserEntity.findById(id)?.toUser()
}
}SchemaUtils: Membuat dan Menghapus Tabel
Gunakan SchemaUtils.create(Table1, Table2) untuk membuat tabel jika belum ada, dan SchemaUtils.drop() untuk menghapusnya. Panggil ini di dalam transaction { } saat aplikasi dimulai:
transaction {
SchemaUtils.create(Users, Posts, Comments)
}Mengonfigurasi Koneksi di Ktor
Inisialisasi basis data di modul Application agar dijalankan satu kali saat server dimulai:
fun Application.configureDatabase() {
val dbUrl = environment.config.property("ktor.database.url").getString()
Database.connect(dbUrl, driver = "org.postgresql.Driver",
user = "...", password = "...")
transaction { SchemaUtils.create(Users) }
}Tingkat Isolasi Transaksi
Teruskan tingkat isolasi ke transaction() saat Anda memerlukan jaminan konsistensi yang lebih kuat atau lebih lemah:
transaction(Connection.TRANSACTION_SERIALIZABLE) {
// serializable isolation
}Transaksi Bersarang
Secara bawaan, panggilan transaction { } yang bersarang bergabung dengan transaksi luar. Untuk mendapatkan transaksi independen, gunakan transaction(db, outerTransactionIsEmpty = false) { } atau titik simpan.
Pencatatan SQL
Aktifkan pencatatan SQL untuk melihat kueri yang dihasilkan selama pengembangan. Atur StdOutSqlLogger atau pencatat khusus di dalam blok transaksi:
transaction {
addLogger(StdOutSqlLogger)
// ...
}Praktik Terbaik Pengumpulan Koneksi
Selalu gunakan HikariCP (atau yang serupa) di produksi. Atur maximumPoolSize agar sesuai dengan jumlah utas server dan connectionTimeout agar gagal dengan cepat saat kumpulan koneksi kehabisan ruang. Pantau penggunaan kumpulan koneksi di produksi.
Pemeriksaan Singkat
Apa yang terjadi jika pengecualian yang tidak tertangkap dilemparkan di dalam blok transaction { } pada Exposed?
Ringkasan: Penyiapan Exposed dan DSL Transaksi
Inti pembelajaran:
- Hubungkan dengan
Database.connect()satu kali saat startup (gunakan HikariCP di produksi) - Semua operasi basis data berjalan di dalam
transaction { }— transaksi dikonfirmasi jika berhasil dan dibatalkan jika terjadi pengecualian - Buat atau hapus tabel dengan
SchemaUtils.create()di dalam transaksi - Bungkus panggilan Exposed yang memblokir dalam
withContext(Dispatchers.IO)pada konteks korutin - Aktifkan
StdOutSqlLoggerselama pengembangan untuk memeriksa SQL yang dihasilkan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi” gratis?
Ya — teks lengkap “Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi” 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 “Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi”?
Hubungkan ke basis data, konfigurasikan Exposed, dan jalankan kode di dalam transaksi. 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 1 dari 4.
Berapa lama pelajaran “Penyiapan Exposed: Koneksi Basis Data dan DSL Transaksi” 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