Computer language and framework/GO

[Go] 간단한 gorm 사용기

WhiteGoblin 2022. 6. 24. 14:43
반응형

휴식기에 접어 들어서 golang 공부를 해보자는 생각에 두서 없이 사용 했던 gorm 을 정리 해보겠습니다. 

 

* database 변수 생성

 

var (
	db *gorm.DB
)

 

위 와 같이 변수를 선언 해두고 해당 db 에 대해서 객체를 생성해주면 된다. 

 

func Connect() {
	fmt.Println("Connecting to mysql database")

	rootid := os.Getenv("ROOTID")
	rootpwd := os.Getenv("ROOTPWD")
	database_name := os.Getenv("DATABASE")

	d, err := gorm.Open("mysql", rootid+":"+rootpwd+"@/"+database_name+"?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	db = d
}

그리고 향후 db 를 가지고 올 함수 까지 만들어 준다. 

 

func GetDB() *gorm.DB{
	return db
}

모든 코드를 하나로 두게 되면 

 

mysql.go

 

package config

import (
	"fmt"
	"os"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

var (
	db *gorm.DB
)

func Connect() {
	fmt.Println("Connecting to mysql database")

	rootid := os.Getenv("ROOTID")
	rootpwd := os.Getenv("ROOTPWD")
	database_name := os.Getenv("DATABASE")

	d, err := gorm.Open("mysql", rootid+":"+rootpwd+"@/"+database_name+"?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	db = d
}

func GetDB() *gorm.DB {
	return db
}

 

이러한 코드를 통해서 mysql 과의 연결 및 객체를 가지고 올 수 있게 된다. 

 

가볍게 gorm 에서 데이터를 검색, 입력, 제거 하는 방안에 대해서 추가하자면 

 

입력하고자 하는 데이터가

 

type Book struct {
	gorm.Model
	Name        string `gorm:""json:"name"`
	Data      string `json:"Data"`
}

이라고 가정 했을 때 

 

기존의 작성한 코드를 기반으로 db 객체를 만들게 되면 

 

var db *gorm.DB

func init() {
	config.Connect()
	db = config.GetDB()
	db.AutoMigrate(&Data{})
}

 

* 아이디를 통한 검색 

func GetById(Id int64) (*DataBlock , * gorm.DB) {
	var dataBlock DataBlock
    db := db.Where("ID=?",Id).Find(&dataBlock)
    return &dataBlock,db
}

 

* 모든 데이터를 가지고 올 때 

 

func GetAllData() []Book {
	var Datas []Data
	db.Find(&Datas)
	return Datas
}

 

보시는 바와 같이 Where 를 통해서 조건문만을 붙였다는 차이가 있다. 

 

* 데이터 제거의 경우 

func DeleteData(ID int64) Data {
	var data Data
	db.Where("ID=?", ID).Delete(Data)
	return Data
}

* 마지막으로 데이터를 입력하는 경우 

func (d *Data) CreateBook() *Data {

	log.Println("Created a new record")
	db.NewRecord(d)
	db.Create(&d)
	return d
}

 

이 처럼 기존의 mysql 모듈을 사용할 때 보다 보다 간단하게 작성할 수 있다는 것을 알 수 있다.

 

현재로써는 많이 사용하지 않아서 기본적인 기능만 구현해두었지만 추가적으로 이용하게 되면 내용을 추가하겠다.

반응형