Gorm Golang
Install And Connect
install library gorm
go get -u gorm.io/gorm
Install Drive Sql
go get -u gorm.io/driver/sqlite
Create Connectin Golang
package main
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var db *gorm.DB
var err error
func initializeDatabase() (*gorm.DB, error) {
// Membuat koneksi ke database SQLite
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
return nil, fmt.Errorf("failed to connect database: %v", err)
}
return db, nil
}
func main() {
db, err = initializeDatabase()
if err != nil {
panic(err)
}
// Lanjutkan dengan operasi database menggunakan variabel `db`
}
Create Model
type User struct {
ID uint `gorm:"primaryKey"`
Username string `gorm:"uniqueIndex"`
Email string
Password string
}
Migrasi
// Pastikan database sudah diinisialisasi
db, err := initializeDatabase()
if err != nil {
panic(err)
}
// Melakukan migrasi untuk model User
db.AutoMigrate(&User{})
Referensi : https://gorm.io/docs/migration.html
Create
func createUser(username, email, password string) (*User, error) {
user := &User{Username: username, Email: email, Password: password}
result := db.Create(user)
return user, result.Error
}
Get Data
func getUserByID(id uint) (*User, error) {
var user User
result := db.First(&user, id)
return &user, result.Error
}
Update
func updateUserEmail(id uint, newEmail string) (*User, error) {
user, err := getUserByID(id)
if err != nil {
return nil, err
}
user.Email = newEmail
result := db.Save(user)
return user, result.Error
}
Delete
func deleteUser(id uint) error {
user, err := getUserByID(id)
if err != nil {
return err
}
result := db.Delete(user)
return result.Error
}
Operasi Lanjutan
1. Query dengan Relasi:
Jika Anda memiliki model yang berhubungan, Anda dapat dengan mudah menarik relasi tersebut
type Profile struct {
ID uint
Name string
UserID uint
User User
}
db.Preload("User").Find(&profiles)
// Membuat profile untuk user baru
newProfile := Profile{Name: "Alice Wonderland", UserID: newUser.ID}
db.Create(&newProfile)
// Menampilkan semua profil dengan informasi pengguna yang terkait
var profiles []Profile
db.Preload("User").Find(&profiles)
for _, profile := range profiles {
fmt.Printf("Profile Name: %s, Username: %s, Email: %s\n", profile.Name, profile.User.Username, profile.User.Email)
}
Preload
memastikan bahwa relasiUser
untuk setiapProfile
juga dimuat.
2. Pemilihan Kolom Khusus:
Jika Anda hanya ingin memilih beberapa kolom tertentu:
var usernames []string
db.Model(&User{}).Pluck("username", &usernames)
3. Pengurutan dan Limitasi:
Mengurutkan hasil berdasarkan kolom tertentu dan membatasi jumlah hasil:
var users []User
db.Order("username desc").Limit(5).Find(&users)
4. Pengelompokan dan Agregasi:
Misalkan Anda ingin menghitung jumlah pengguna dengan email domain yang sama:
type Result struct {
Domain string
Count int
}
var results []Result
db.Model(&User{}).Select("SUBSTR(email, INSTR(email, '@') + 1) AS domain, COUNT(*) as count").Group("domain").Scan(&results)
5. Menggunakan Raw SQL:
Jika Anda perlu menulis query SQL kustom:
var users []User
db.Raw("SELECT * FROM users WHERE username = ?", "ariadi").Scan(&users)
6. Pengkondisian Lebih Lanjut:
Untuk kasus-kasus yang lebih kompleks, Anda bisa menggunakan Where
:
db.Where("username LIKE ? ", "ari%").Find(&users)
Kesimpulan:
Sponsored
GORM memberikan kekuatan penuh dalam mengakses dan memanipulasi database, mulai dari operasi sederhana hingga query lanjutan yang kompleks. Meskipun begitu, selalu pastikan untuk memahami efek dari query yang Anda jalankan, terutama dalam hal kinerja dan keamanan.
Another Post
Mendalami Database Sharding
Basis data adalah komponen penting dari setiap aplikasi, tetapi juga merupakan salah satu komponen yang paling sulit untuk di-skala secara horizontal. Ketika aplikasi menerima peningkatan lalu lintas dan volume data, basis data dapat menjadi hambatan kinerja, yang mempengaruhi pengalaman pengguna.
Clean Architecture : Konsep Yang Paling Banyak Dibahas dalam membangun aplikasi
Ini adalah salah satu konsep architecture yang paling banyak di bahas dalam sofware engineering dimana konsep ini memberikan kita kerangkan untuk membangun aplikasi yang scalable
Sponsored
Cara Mengatasi Docker Mac Pesan Error Malware
Kalian punya pesan error malware di docker kalian, ini adalah solusi jitu untuk mengatasi hal tersebut