Pelajari lebih dalam cara melakukan update data di GORM dengan Batch Update, Block Global Updates, dan Updated Records Count dalam Golang. Dilengkapi dengan contoh kode dan unit test.
GORM merupakan ORM yang sangat fleksibel dalam menangani operasi update data. Setelah membahas dasar-dasar update data pada artikel sebelumnya, dalam artikel ini kita akan mendalami fitur-fitur lanjutan, seperti Batch Update, Block Global Updates, dan Updated Records Count.
5. Batch Update
Batch Update memungkinkan kita memperbarui banyak record dalam satu query untuk meningkatkan efisiensi.
Contoh Implementasi
// BatchUpdate memperbarui nama user berdasarkan ID yang diberikan
func BatchUpdate(db *gorm.DB, users []User) error {
return db.Model(&User{}).Save(&users).Error // Memperbarui banyak record sekaligus
}
Penjelasan Kode
- Fungsi
BatchUpdate
menerima parameterdb
(koneksi database) danusers
(daftar pengguna yang akan diperbarui). db.Model(&User{})
menentukan bahwa operasi dilakukan pada modelUser
.Save(&users)
menyimpan semua perubahan dalam arrayusers
ke database.
Unit Test
func TestBatchUpdate(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
db.AutoMigrate(&User{})
users := []User{
{Name: "Alice", Email: "alice@example.com"},
{Name: "Bob", Email: "bob@example.com"},
}
db.Create(&users)
users[0].Name = "Alice Updated"
users[1].Name = "Bob Updated"
err := BatchUpdate(db, users)
if err != nil {
t.Errorf("Batch update gagal: %v", err)
}
}
Penjelasan Kode Unit Test
- Membuka koneksi database menggunakan SQLite.
- Melakukan migrasi untuk memastikan tabel
User
tersedia. - Menambahkan beberapa pengguna ke dalam database.
- Memperbarui nama pengguna dan memanggil fungsi
BatchUpdate
. - Jika terjadi error, test akan gagal.
6. Block Global Updates
GORM secara default memblokir update tanpa kondisi WHERE
untuk menghindari kesalahan fatal.
Contoh Implementasi
// GlobalUpdateError mencoba memperbarui semua record tanpa kondisi WHERE
func GlobalUpdateError(db *gorm.DB) error {
return db.Model(&User{}).Update("name", "Updated Name").Error // Ini akan gagal karena GORM memblokir global update
}
Penjelasan Kode
- Fungsi
GlobalUpdateError
mencoba memperbarui kolomname
tanpa kondisiWHERE
. - GORM akan menolak update ini untuk mencegah perubahan pada seluruh tabel.
Unit Test
func TestGlobalUpdateError(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
db.AutoMigrate(&User{})
err := GlobalUpdateError(db)
if err == nil {
t.Errorf("Global update tidak seharusnya diizinkan")
}
}
Penjelasan Kode Unit Test
- Membuka koneksi database SQLite dan melakukan migrasi tabel
User
. - Memanggil fungsi
GlobalUpdateError
. - Jika update berhasil, test akan gagal karena GORM seharusnya memblokir update tanpa kondisi.
7. Updated Records Count
GORM menyediakan fitur untuk mengetahui jumlah record yang diperbarui setelah melakukan operasi update.
Contoh Implementasi
// UpdateWithCount mengembalikan jumlah record yang diperbarui
func UpdateWithCount(db *gorm.DB, id uint, name string) (int64, error) {
result := db.Model(&User{}).Where("id = ?", id).Update("name", name)
return result.RowsAffected, result.Error
}
Penjelasan Kode
- Fungsi
UpdateWithCount
menerimaid
danname
untuk diperbarui. Where("id = ?", id)
memastikan hanya record dengan ID tertentu yang diperbarui.Update("name", name)
mengubah kolomname
.result.RowsAffected
mengembalikan jumlah record yang diperbarui.
Unit Test
func TestUpdateWithCount(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
db.AutoMigrate(&User{})
user := User{Name: "Charlie", Email: "charlie@example.com"}
db.Create(&user)
count, err := UpdateWithCount(db, user.ID, "Charlie Updated")
if err != nil {
t.Errorf("Gagal memperbarui user: %v", err)
}
if count != 1 {
t.Errorf("Jumlah record yang diperbarui tidak sesuai, expected: 1, got: %d", count)
}
}
Penjelasan Kode Unit Test
- Membuka koneksi database SQLite dan memastikan tabel
User
tersedia. - Menambahkan satu user ke database.
- Memanggil
UpdateWithCount
untuk memperbarui nama user. - Memeriksa apakah jumlah record yang diperbarui sesuai dengan ekspektasi (seharusnya 1).
Kesimpulan
Artikel ini telah membahas fitur lanjutan dari update data menggunakan GORM di Golang, termasuk Batch Update, Block Global Updates, dan Updated Records Count. Dengan pemahaman yang baik, Anda dapat lebih optimal dalam menangani operasi update data di aplikasi Anda.
Baca Juga:
11 Update Data GORM Library
13 Advanced Update Data Gorm Library
Artikel Terhangat
14 Menghapus (Delete) Data Gorm Library
03 Mar 2025
13 Advanced Update Data Gorm Library
03 Mar 2025
11 Update Data GORM Library
03 Mar 2025
08 Advanced Query dengan GORM di Golang
03 Mar 2025

14 Menghapus (Delete) Data Gorm Library

13 Advanced Update Data Gorm Library

11 Update Data GORM Library
