Mengenal Gorm

6 Mar 2019

Gorm adalah pustaka ORM untuk golang, ORM itu singkatan dari object-relational mapping walaupun sebenarnya golang bukan bahasa OOP seperti pada umumnya. Alasan kenapa saya menggunakan gorm adalah karena kita tidak perlu merubah tipe data dari mysql ke struk, apalagi jika field struk tersebut ada yang null maka kita harus menggunakan tipe data yang nullable.

Contohnya string nullable, int nullable dll. Akan sangat repot sekali jika kolomnya banyak, oleh karena itu saya memakai gorm untuk memudahkan hal tersebut.

Install

$ go get github.com/jinzhu/gorm

Untuk contoh saya akan membuat tabel posts, silahkan buat tabel posts dengan aplikasi favorit Anda.

create table posts(
  id int(11) not null primary key auto_increment,
  title varchar(100) not null,
  body text,
  published tinyint(1) unsigned default 0
);

Setelah kita selesai membuat tabel posts, maka kita akan membuat folder gorm. Karena akun github saya adalah susilolab maka saya akan membuat folder di github.com/susilolab/blog/gorm dan kita membuat file main.go.

Koneksi ke database mysql

kita akan mencoba menghubungkan ke database mysql. Kita juga membutuhkan pustaka driver mysql selain gorm untuk menghubungkan ke database. Ok, pertama kita bikin paket main dan import paket fmt, log, driver mysql dan gorm.

Dan buat struk Post, struk ini untuk mewakili dari table posts. Struk pada Go konsepnya mirip klas pada PHP. Berikut potongan kodenya:

package main

import (
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type Post struct {
    ID        int
    Title     string
    Body      string
    Published int
}

Koneksi database

Kemudian pada fungsi main kita buat koneksi ke database dengan memanggil fungsi gorm.Open, fungsi Open akan mengembalikan struk gorm.DB dan err. Jika err tidak sama dengan nil munculkan pesan error dan exit, cukup tuliskan log.Fatalln. Defer.Close() setelah error handling berguna untuk menutup koneksi mysql.

func main() {
    conn := "root:password@tcp(127.0.0.1:3306)/blog?charset=utf8&parseTime=True"
    db, err := gorm.Open("mysql", conn)
    if err != nil {
        log.Fatalln(err)
    }
    defer db.Close()
}

Query Data

Kemudian kita bisa memulai query data, kita akan mencoba mengambil semua data yang ada pada tabel posts, perlu di ingat bahwa gorm akan menggangap nama tabel semua dalam bentuk jamak kecuali kita mengaktifkan mode singular atau menyebutkan nama tabel dengan fungsi Table. Misalnya struk User maka nama tabelnya akan dianggap users, struk UserGroup namanya tabelnya akan dianggap user_groups dll. Pertama kita bikin slice Post dengan nama posts untuk menampung datanya.

posts := make([]Post, 0)
if db.Find(&posts).RecordNotFound() {
    log.Fatalln("record tidak ada")
}

for _, val := range posts {
    fmt.Println(val.Title)
}

Mendapat data pertama dan terakhir

Untuk mendapatkan record pertama kita bisa menggunakan fungsi First dan untuk data terakhir menggunakan fungsi Last

var post Post
db.First(&post)
db.First(&post, 10)

var lastPost Post
db.Last(&lastPost)

Insert data ke tabel

Untuk insert data ke tabel ada 2 cara, pertama menggunakan fungsi Create dan yang kedua dengan fungsi NewRecord. Fungsi Create akan mengembalikan struk gorm.DB, untuk melihat errornya bisa melalui property Error. Sedangkan NewRecord akan mengembalikan nilai true jika sukses dan false jika gagal.

Pertama buat struk Post dan isi field-fieldnya.

Post := Post{ID: 2, Title: "belajar gorm", Body: "awesome", Published: 1}
if err := db.Create().Error; err == nil {
    fmt.Println("data sukses disimpan.");
}

Update

Update dapat dilakukan dengan memanggil fungsi Save, setelah kita mencari recordnya terlebih dahulu.

post := Post{}
if db.First(&post, 1).RecordNotFound() {
  log.Fatalln("Record not found.")
}

post.Title = "Belajar ORM dengan Gorm"
db.Save(&post)

Sekian dari saya dan semoga bermanfaat. Untuk dokumentasi lengkapnya dapat Anda baca disini gorm.io.