Study
Play Framework

Koneksi Database Dasar (Slick atau JDBC)

Penjelasan

Play tidak memaksa ORM tertentu, tapi Slick adalah pilihan paling umum di ekosistem Scala — sebuah "functional-relational mapper" yang merepresentasikan tabel database sebagai class Scala type-safe, dan query ditulis mirip operasi koleksi Scala (map, filter, dst) yang diterjemahkan menjadi SQL saat dieksekusi. Alternatif lebih sederhana adalah JDBC langsung lewat `play.api.db.Database`, cocok untuk query native tanpa lapisan abstraksi tambahan. Konfigurasi koneksi database (URL, driver, user, password) didefinisikan di `application.conf` di bawah key `slick.dbs.default` (untuk Slick) atau `db.default` (untuk JDBC biasa). Slick membutuhkan definisi `TableQuery` yang memetakan struktur tabel, lalu operasi CRUD dilakukan lewat `db.run(query.result)` yang mengembalikan `Future`, selaras dengan filosofi non-blocking Play.

Contoh Konsep

import slick.jdbc.MySQLProfile.api._
import scala.concurrent.Future

case class Produk(id: Long, nama: String)

class ProdukTable(tag: Tag) extends Table[Produk](tag, "produk") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def nama = column[String]("nama")
  def * = (id, nama) <> (Produk.tupled, Produk.unapply)
}

val produkQuery = TableQuery[ProdukTable]

// Diasumsikan `db: Database` sudah tersedia lewat injection
def semuaProduk(): Future[Seq[Produk]] = db.run(produkQuery.result)

Praktikum

Definisikan Table Slick untuk entitas Kategori(id: Long, nama: String, urutan: Int) beserta TableQuery-nya.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Selalu jalankan query Slick lewat db.run yang mengembalikan Future dan proses hasilnya secara asinkron — memanggil Await.result untuk memblokir menunggu hasil akan menghilangkan keunggulan non-blocking Play.