- Golang secara default mempunyai sebuah package bernama database, package ini berisi kumpulan standard inteface yang menjadi standard untuk berkomunikasi ke database. Ini membuat kode program yang kita buat untuk mengakses jenis database apapun bisa menggunakan kode yang sama, yang berbeda hanya kode SQL yang perlu kita gunakan sesuai dengan database yang kita gunakan
- By default Golang mempunyai Database Pooling sendiri, dengan minimal koneksi 10 walaupun tidak ada traffic dan kita juga bisa membatasinya dengan mengatur maksimal koneksi
- Eksekusi perintah SQL menggunakan function (DB)
ExecContext(context, sql, params)
ketika mengirim perintah SQL kita butuh mengirimkan context, dengan context kita bisa mengirim sinyal cancel jika kita ingin membatalkan pengiriman perintah SQL nya - Untuk query yang membutuhkan result seperti
SELECT
kita harus menggunakan function (DB)QueryContext(context, sql, params)
- Hasil query function adalah sebuah struct sql.Rows dimana ini digunakan sebagai iterasi terhadap hasil query kita bisa menggunakan function
(Rows) Next() (boolean)
untuk melakukan iterasi terhadap data hasil query, jika return data false artinya sudah tidak adalagi data pada result tersebut, dan jangan lupa setelah menggunakan Rows untuk menutupnya menggunakan function(Rows) Close()
- Tipe data TIME, DATETIME, TIMESTAMP akan di parsing menjadi byte[], dan []uint8 dan bisa kita ubah menjadi string untuk di konversi ke time yg di mengerti golang, akan tetapi jika dilakukan secara manual tentu akan sangat merepotkan, maka dari itu golang menyediakan opsi parameter
parseTime=true
- Untuk parsing tipe data NULL di golang database memerlukan tipe data yang diawali null contoh jika tipe data VARCHAR di database dan bersifat nullable, maka di golang harus menjadi
NullString
- Gunakanlah query parameter (?) atau prepared statement
(DB) PrepareContext(context, sql)
untuk menghindari SQL Injection - Untuk mendapatkan data id yang sudah kita insert ke dalam MySQL kita bisa menggunakan function
(Result) LastInsertId()
untuk mendapatkan id terakhir yang dibuat secara autoincrement Result disini adalah object yang dikembalikan saat kita menggunakan functionExec
- Database transaction by default semua perintah SQL yang dilakukan golang bersifat auto-commit atau commit otomatis, namun kita bisa menggunakan fitur transaksi sehingga SQL yang kita kirim tidak secara otomatis di commit ke database, untuk memulai transaksi kita bisa menggunakan function
(DB) Begin()
dimana akan menghasilkan struct Tx yang merupakan representasi Transaction, hampir semua function DB ada di TX contoh seperti Exec, Query ataupun Prepare. Setelah proses transaksi selesai kita bisa menggunakan function(TX) Commit()
untuk melakukan commit atau(TX) Rollback()
untuk melakukan rollback - Repository Pattern ini biasanya digunakan sebagai jembatan antar bussiness logic aplikasi kita dengan semua perintah SQL ke database, jadi semua perintah SQL akan ditulis di Repository sedangkan bussiness logic kode program kita hanya cukup menggunakan Repository tersebut