0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

Menyusun Transaksi

Gabungkan efek dengan aman.

Menyusun Transaksi adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 4 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 Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

ConnectionIO adalah Monad

Kekuatan sejati Doobie adalah bahwa ConnectionIO merupakan monad. Anda menggabungkan banyak pernyataan menjadi satu program yang lebih besar menggunakan flatMap atau komprehensi for.

Semua hal yang Anda rangkai dengan cara ini berjalan pada koneksi yang sama dalam satu transaksi.

import doobie.implicits._

val program: ConnectionIO[Long] =
  for {
    id <- insertUser("Ada")
    _  <- insertProfile(id)
  } yield id

Satu Transaksi untuk setiap transact

Satu Transaksi untuk setiap transact
val io: IO[Long] = program.transact(xa)

Penulisan Atomik dengan Banyak Pernyataan

Penulisan Banyak Pernyataan secara Atomik
def transfer(from: Long, to: Long, cents: Int) =
  for {
    _ <- sql"update acct set bal = bal - $cents where id = $from".update.run
    _ <- sql"update acct set bal = bal + $cents where id = $to".update.run
  } yield ()

Memunculkan dan Menangani Kesalahan

Menaikkan dan Menangani Kesalahan
import cats.syntax.all._
import doobie.free.connection.{raiseError, pure}

def debit(id: Long, c: Int): ConnectionIO[Unit] =
  sql"update acct set bal = bal - $c where id = $id".update.run.flatMap {
    case 1 => pure(())
    case _ => raiseError(new RuntimeException("no such account"))
  }

Logika Kondisional dalam Transaksi

Logika Bersyarat dalam Transaksi
for {
  bal <- sql"select bal from acct where id = $id".query[Int].unique
  _   <- if (bal >= amt)
           sql"update acct set bal = bal - $amt where id = $id".update.run
         else raiseError(new RuntimeException("insufficient funds"))
} yield ()

Titik Simpan untuk Pembatalan Sebagian

Savepoint untuk Pembatalan Sebagian
import doobie.free.{connection => FC}

val withSp =
  for {
    sp <- FC.setSavepoint
    _  <- riskyWrite.handleErrorWith(_ => FC.rollback(sp))
  } yield ()

Menggabungkan Kueri dan Penulisan

Menggabungkan Kueri dan Operasi Tulis
for {
  v <- sql"select stock from items where id = $id".query[Int].unique
  _ <- sql"update items set stock = ${v - 1} where id = $id".update.run
  n <- sql"select stock from items where id = $id".query[Int].unique
} yield n

Menggunakan Kembali Program dengan traverse

Menggunakan Kembali Program dengan traverse
import cats.syntax.all._

def saveAll(names: List[String]): ConnectionIO[List[Long]] =
  names.traverse(insertUser)

Tingkat Isolasi

Tingkat Isolasi
import doobie.free.{connection => FC}
import java.sql.Connection

val serializable =
  FC.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) *> program

Mencoba Ulang saat Kegagalan Serialisasi

Mencoba Ulang Kegagalan Serialisasi
def runWithRetry(io: IO[Unit], n: Int): IO[Unit] =
  io.handleErrorWith {
    case _ if n > 0 => runWithRetry(io, n - 1)
    case e          => IO.raiseError(e)
  }

Jaga Transaksi Tetap Singkat

Pertahankan Transaksi Tetap Singkat
// good: gather input first, then one short transactional write
val write: ConnectionIO[Int] =
  sql"update users set name = $name where id = $id".update.run

Pemeriksaan Singkat

Pemeriksaan Cepat

Ringkasan

Ringkasan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menyusun Transaksi” gratis?

Ya — teks lengkap “Menyusun Transaksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menyusun Transaksi”?

Gabungkan efek dengan aman. Kamu berlatih Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming 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 4 dari 4.

Berapa lama pelajaran “Menyusun 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 Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming 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

  1. Menghubungkan dengan Transactor
  2. Menjalankan Kueri
  3. Penyisipan dan Pembaruan
  4. Menyusun Transaksi
← Kembali ke Scala for Backend Engineering & Functional Programming