Golang
主页 > 脚本 > Golang >

Go使用Gin+mysql实现增删改查的详细实例

2022-12-04 | 佚名 | 点击:

0.前置知识

1.架构

使用mysql作为数据库,Gin作为Web框架。

2.功能模块

1.自定义Person结构体

2.实现对Person的增删改查。

3.实现流程

1.建立数据库连接池db,然后连接指定的数据库。

2.编写Web接口(增删改查)

3.通过postman测试或者直接网页请求测试。

4.代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

package main

 

// 导入模块

import (

    "bytes"

    "database/sql"

    "fmt"

    "github.com/gin-gonic/gin"

    _ "github.com/go-sql-driver/mysql"

    "log"

    "net/http"

    "strconv"

)

 

 

var db *sql.DB

 

// Person 自定义Person类

type Person struct {

    Id        int    `json:"id"`

    FirstName string `json:"first_name" form:"first_name"`

    LastName  string `json:"last_name" form:"last_name"`

}

 

func (p *Person) get(db *sql.DB) (person Person, err error) {

    row := db.QueryRow("SELECT id,first_name,last_name from person where id=?", p.Id)

    err = row.Scan(&person.Id, &person.FirstName, &person.LastName)

    if err != nil {

        return

    }

    return

}

 

func (p *Person) getAll(db *sql.DB) (persons []Person, err error) {

    rows, err := db.Query("select id,first_name,last_name from person")

    fmt.Println(rows)

    if err != nil {

        return

    }

    for rows.Next() {

        var person Person

        rows.Scan(&person.Id, &person.FirstName, &person.LastName)

        persons = append(persons, person)

    }

    defer rows.Close()

    return

}

 

func (p *Person) add(db *sql.DB) (Id int, err error) {

    stmt, err := db.Prepare("INSERT into person(first_name,last_name) values (?,?)")

    if err != nil {

        return

    }

    rs, err := stmt.Exec(p.FirstName, p.LastName)

    if err != nil {

        return

    }

    id, err := rs.LastInsertId()

    if err != nil {

        log.Fatalln(err)

    }

    Id = int(id)

    defer stmt.Close()

    return

}

 

func (p *Person) update(db *sql.DB) (rows int, err error) {

    stmt, err := db.Prepare("update person set first_name=?,last_name=? where id=?")

    if err != nil {

        log.Fatalln(err)

    }

    rs, err := stmt.Exec(p.FirstName, p.LastName, p.Id)

    if err != nil {

        log.Fatalln(err)

    }

    row, err := rs.RowsAffected()

    if err != nil {

        log.Fatalln(err)

    }

    rows = int(row)

    defer stmt.Close()

    return

}

 

func (p *Person) del(db *sql.DB) (rows int, err error) {

    stmt, err := db.Prepare("delete from person where id=?")

    if err != nil {

        log.Fatalln(err)

    }

    rs, err := stmt.Exec(p.Id)

    if err != nil {

        log.Fatalln(err)

    }

    row, err := rs.RowsAffected()

    if err != nil {

        log.Fatalln(err)

    }

    rows = int(row)

    defer stmt.Close()

    return

}

 

func test(db *sql.DB) {

    rows, err := db.Query("select * from person")

    if err != nil {

        return

    }

    defer rows.Close()

    var persons []Person

    for rows.Next() {

        var person Person

        rows.Scan(&person.Id, &person.FirstName, &person.LastName)

        persons = append(persons, person)

    }

    fmt.Println(persons)

}

func main() {

    var err error

    db, err := sql.Open("mysql", "root:xxxxx@tcp(127.0.0.1:3306)/go_project01?parseTime=true")

    if err != nil {

        log.Fatal(err.Error())

    }

    //defer db.Close()

    err = db.Ping()

    if err != nil {

        log.Fatal(err.Error())

    }

    //test(db)

    //创建路由引擎

    router := gin.Default()

 

    //查询,返回所有对象和对象个数

    router.GET("/persons", func(context *gin.Context) {

        p := Person{}

        persons, err := p.getAll(db)

        if err != nil {

            log.Fatalln(err)

        }

        context.JSON(http.StatusOK, gin.H{

            "result": persons,

            "count":  len(persons),

        })

    })

    //根据id查询

    router.GET("/person/:id", func(context *gin.Context) {

        var result gin.H

        id := context.Param("id")

 

        Id, err := strconv.Atoi(id)

        if err != nil {

            log.Fatalln(err)

        }

        p := Person{

            Id: Id,

        }

        person, err := p.get(db)

        if err != nil {

            result = gin.H{

                "result": nil,

                "count":  0,

            }

        } else {

            result = gin.H{

                "result": person,

                "count":  1,

            }

        }

        context.JSON(http.StatusOK, result)

    })

    //创建person

    router.POST("/person", func(context *gin.Context) {

        var p Person

        err := context.Bind(&p)

        if err != nil {

            log.Fatalln(err)

        }

 

        Id, err := p.add(db)

        if err != nil {

            log.Fatalln(err)

        }

        fmt.Println(Id)

        name := p.FirstName + " " + p.LastName

        context.JSON(http.StatusOK, gin.H{

            "message": fmt.Sprintf(" %s 成功创建", name),

        })

    })

    //更新update

    router.PUT("/person/:id", func(context *gin.Context) {

        var (

            p      Person

            buffer bytes.Buffer

        )

 

        id := context.Param("id")

        Id, err := strconv.Atoi(id)

        if err != nil {

            log.Fatalln(err)

        }

        err = context.Bind(&p)

        if err != nil {

            log.Fatalln(err)

        }

        p.Id = Id

        rows, err := p.update(db)

        if err != nil {

            log.Fatalln(err)

        }

        fmt.Println(rows)

        buffer.WriteString(p.FirstName)

        buffer.WriteString(" ")

        buffer.WriteString(p.LastName)

        name := buffer.String()

 

        context.JSON(http.StatusOK, gin.H{

            "message": fmt.Sprintf("成功更新到%s", name),

        })

    })

    //删除person

    router.DELETE("/person/:id", func(context *gin.Context) {

        id := context.Param("id")

 

        Id, err := strconv.ParseInt(id, 10, 10)

        if err != nil {

            log.Fatalln(err)

        }

        p := Person{Id: int(Id)}

        rows, err := p.del(db)

        if err != nil {

            log.Fatalln(err)

        }

        fmt.Println("delete rows: ", rows)

 

        context.JSON(http.StatusOK, gin.H{

            "message": fmt.Sprintf("成功删除用户:%s", id),

        })

    })

    router.Run(":8080")

}

5.结果

原文链接:https://blog.csdn.net/weixin_45750972/article/details/127112887
相关文章
最新更新