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 모듈을 사용할 때 보다 보다 간단하게 작성할 수 있다는 것을 알 수 있다.
현재로써는 많이 사용하지 않아서 기본적인 기능만 구현해두었지만 추가적으로 이용하게 되면 내용을 추가하겠다.
반응형