-
Golang - ORM(2) [8]Go 2021. 2. 8. 23:04728x90반응형
2021/02/07 - [Go] - RaspberryPi로 Golang 서버만들기 - ORM(1) [7]
이전 글에서 보았던 ORM을 이용하면 더 간단히 API를 구성할 수 있다.
2021/01/06 - [Go] - RaspberryPi로 Golang 서버만들기 - 회원관리 하기(1) [6]
먼저 세팅은 이전에 회원관리 프로그램에서 수정하였습니다.
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반응형'Go' 카테고리의 다른 글
Golang 기초[2] (0) 2021.04.13 Golang 기초 [1] (0) 2021.04.12 Golang - ORM(1) [7] (0) 2021.02.07 RaspberryPi로 Golang 서버만들기 - 회원관리 하기 (3) [6] (1) 2021.01.06 RaspberryPi로 Golang 서버만들기 - 회원관리 하기 (2) [6] (0) 2021.01.06