Golang+Angular+MariaDB #19 Database CRUD 추가
Development/Go+Angular+MariaDB 2021. 2. 9. 20:16 |참고페이지 : Using Go with MariaDB (링크
Using Go with MariaDB | MariaDB
2019 Webinar: Building Modern Applications with MariaDB Hybrid Transactional/Analytical Processing (HTAP) Watch Now _________________________ I have been using Google’s Go programming language for a…
mariadb.com
이전 Database 연동 작업 이후,
생성(Create-POST), 읽기(Read-GET), 수정(Update-PUT), 삭제(Delete-DELETE)
작업을 추가로 진행하겠습니다.
main.go 수정
...
func main() {
...
}
func connetDatabase() *sql.DB { ... }
func checkErr(err error) { ... }
func getUsers(w http.ResponseWriter, r *http.Request) { ... }
// 특정 user 정보 전달
func getUser(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w)
HttpInfo(r)
// 파라미터값 체크
params := mux.Vars(r)
// 파라미터값 중 id값 추출
id, _ := strconv.Atoi(params["id"])
// 주석 처리 or 제거
// 일치하는 user id를 확인
/*for _, user := range users {
if user.Id == id {
// 일치하는 user의 데이터 표시 및 함수 종료
json.NewEncoder(w).Encode(user)
return
}
}*/
// 코드 추가
// sql.DB 객체 생성
db := connetDatabase()
// 지연하여 닫는다(필수)
defer db.Close()
// 하나의 Row를 갖는 SQL 쿼리
user = User{}
err := db.QueryRow("SELECT * FROM users WHERE id = ?", id).Scan(&user.Id, &user.Name, &user.Email, &user.Password)
checkErr(err)
fmt.Println(user)
if user.Id != 0 {
// 일치하는 user의 데이터 표시 및 함수 종료
json.NewEncoder(w).Encode(user)
return
} else {
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))
}
}
// user 정보 추가
func postUser(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w)
HttpInfo(r)
body, _ := ioutil.ReadAll(r.Body)
var user User
err := json.Unmarshal(body, &user)
defer r.Body.Close()
if err != nil {
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))
return
}
// 주석 처리 or 제거
//users = append(users, user)
// 코드 추가
// sql.DB 객체 생성
db := connetDatabase()
defer db.Close()
// INSERT 문 실행
result, err := db.Exec("INSERT INTO users VALUES (?, ?, ?, ?)", user.Id, user.Name, user.Email, user.Password)
checkErr(err)
// sql.Result.RowsAffected() 체크
n, err := result.RowsAffected()
if n == 1 {
fmt.Println("1 row inserted.")
} else {
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))
return
}
json.NewEncoder(w).Encode(NewResponse(r.Method, "success", 201))
}
// user 정보 수정
func putUser(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w)
HttpInfo(r)
params := mux.Vars(r)
id, _ := strconv.Atoi(params["id"])
body, _ := ioutil.ReadAll(r.Body)
var user User
err := json.Unmarshal(body, &user)
checkErr(err)
// 주석 처리 or 제거
/*for index, _ := range users {
if users[index].Id == id {
users[index] = user
json.NewEncoder(w).Encode(NewResponse(r.Method, "success", 200))
return
}
}
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))*/
// 코드 추가
// sql.DB 객체 생성
db := connetDatabase()
defer db.Close()
// UPDATE 문 실행
result, err := db.Exec("UPDATE users SET id=?, name=?, email=?, password=? WHERE id=?", user.Id, user.Name, user.Email, user.Password, id)
checkErr(err)
// sql.Result.RowsAffected() 체크
n, err := result.RowsAffected()
if n == 1 {
fmt.Println("1 row updated.")
} else {
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))
return
}
json.NewEncoder(w).Encode(NewResponse(r.Method, "success", 201))
}
// user 정보 삭제
func deleteUser(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w)
HttpInfo(r)
params := mux.Vars(r)
id, _ := strconv.Atoi(params["id"])
// 주석 처리 or 제거
/*for index, _ := range users {
if users[index].Id == id {
users = append(users[:index], users[index+1:]...)
json.NewEncoder(w).Encode(NewResponse(r.Method, "success", 200))
return
}
}
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))*/
// 코드 추가
// sql.DB 객체 생성
db := connetDatabase()
defer db.Close()
// Delete 문 실행
result, err := db.Exec("DELETE FROM users WHERE id = ?", id)
checkErr(err)
// sql.Result.RowsAffected() 체크
n, err := result.RowsAffected()
if n == 1 {
fmt.Println("1 row deleted.")
} else {
json.NewEncoder(w).Encode(NewResponse(r.Method, "failed", 400))
return
}
json.NewEncoder(w).Encode(NewResponse(r.Method, "success", 200))
}
'Development > Go+Angular+MariaDB' 카테고리의 다른 글
Golang+Angular+MariaDB #21 Angular Validators (0) | 2021.02.25 |
---|---|
Golang+Angular+MariaDB #20 Router 기능 추가 (0) | 2021.02.15 |
Golang+Angular+MariaDB #18 MariaDB 연동 (0) | 2021.02.08 |
Golang+Angular+MariaDB #17 Toast 띄우기 (0) | 2021.02.04 |
Golang+Angular+MariaDB #16 Bootstrap Modal 추가 + Source 보완 (0) | 2021.02.04 |