Go

Golang - ORM(2) [8]

YunSeYeong 2021. 2. 8. 23:04
728x90
반응형

 

2021/02/07 - [Go] - RaspberryPi로 Golang 서버만들기 - ORM(1) [7]

 

RaspberryPi로 Golang 서버만들기 - ORM(1) [7]

백엔드개발을 하다보면 데이터를 객체화해서 DB에 저장하는 일이 많다. 이 과정에서 DB에서 객체로 객체에서 DB로 변환해주는 과정을 거쳐야 된다. 이런 과정을 줄이고 정리하기위해 ORM이란걸 사

yun-seyeong.tistory.com

이전 글에서 보았던 ORM을 이용하면 더 간단히 API를 구성할 수 있다.

 

 

2021/01/06 - [Go] - RaspberryPi로 Golang 서버만들기 - 회원관리 하기(1) [6]

 

RaspberryPi로 Golang 서버만들기 - 회원관리 하기(1) [6]

지금까지 세팅한 라즈베리로 회원관리 시스템을 만들어 보겠습니다. 먼저, DB설계를 하고, 이를 바탕으로 API를 구성해보겠습니다. 1. DB 설계 회원정보 이름 PK 타입 Nullable id * varchar(12) X password var

yun-seyeong.tistory.com

먼저 세팅은 이전에 회원관리 프로그램에서 수정하였습니다.

 


 

0. User 구조체

type User struct {
	gorm.Model
	Id       string `json:"id" gorm:"column:id"`
	Password string `json:"password" gorm:"column:password"`
	Email    string `json:"email" gorm:"column:email"`
	Phone    string `json:"phone" gorm:"column:phone"`
}

 

 

1. 조회하기

e.GET("/orm/user", func(c echo.Context) error {
	db, err := gorm.Open(mysql.Open("root:raspberry@tcp(192.168.0.100:3306)/RASPBERRY_SERVER?parseTime=true"), &gorm.Config{})
	if err != nil {
		return err
	}

	db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&(user.User{}))

	var users []user.User

	db.Find(&users)

	fmt.Println(users)

	return c.JSON(http.StatusOK, users)
})

Find를 통해 모든 유저를 조회해서 echo.Context에 JSON을 이용하여 Json형태로 출력한다.

 

 

2. 생성하기

e.PUT("/orm/user", func(c echo.Context) error {

	db, err := gorm.Open(mysql.Open("root:raspberry@tcp(192.168.0.100:3306)/RASPBERRY_SERVER?parseTime=true"), &gorm.Config{})
	if err != nil {
		return err
	}

	db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&(user.User{}))

	u := new(user.User)
	if err = c.Bind(u); err != nil {
		return err
	}

	fmt.Println(u)

	db.Create(u)

	return c.JSON(http.StatusOK, "Created")
})

echo.Context에 bind를 이용하면 body에 json을 객체형태로 변환하여 받을 수 있다.

그대로 Create를 하면 DB에 저장된다.

 

 

3. 업데이트하기

e.PATCH("/orm/user", func(c echo.Context) error {
	queryID := c.QueryParam("userid")

	db, err := gorm.Open(mysql.Open("root:raspberry@tcp(192.168.0.100:3306)/RASPBERRY_SERVER?parseTime=true"), &gorm.Config{})
	if err != nil {
		return err
	}

	db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&(user.User{}))

	u := new(user.User)
	if err = c.Bind(u); err != nil {
		return err
	}

	fmt.Println("queryID: ", queryID)
	fmt.Println(u)

	db.Model(&user.User{}).Where("id=?", queryID).Updates(u)

	return c.JSON(http.StatusOK, "Updated")
})

QueryString에 userid를 찾아서 해당 데이터를 body에 내용으로 업데이트한다.

Model로 구조체를 지정하고 id가 queryID인 데이터를 찾아서 u(body의 내용)로 업데이트한다.

 

 

4. 삭제하기

e.DELETE("/orm/user", func(c echo.Context) error {
	queryID := c.QueryParam("userid")

	db, err := gorm.Open(mysql.Open("root:raspberry@tcp(192.168.0.100:3306)/RASPBERRY_SERVER?parseTime=true"), &gorm.Config{})
	if err != nil {
		return err
	}

	db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&(user.User{}))

	fmt.Println("queryID: ", queryID)
	db.Unscoped().Where("id = ?", queryID).Delete(&user.User{})

	return c.JSON(http.StatusOK, "Deleted")
})

where로 데이터를 찾고 Delete로 객체를 적해주면 해당데이터를 삭제한다.

Unscoped를 없에면 컬럼중에 deleted_at이라는 컬럼만 시간이 업데이트 되고,

Unscoped를 넣으면 완전히 데이터를 삭제한다.

728x90
반응형