前面我们使用Gin web框架演示了相关的接口的请求和返回信息,但是一般我们使用在编写api接口的时候都会涉及到数据库的增删改查,所以本文我们来演示一下结合Gin接口和mysql来实现数据存储的案例。
这里需要使用到mysql数据库信息,因此这里的话我们需要引入mysql相关的依赖,步骤如下:
1、在代码里面import数据库信息,如下:
import ( _ "github.com/go-sql-driver/mysql" )
2、执行依赖的下载
go get -u github.com/go-sql-driver/mysql
接下来我们演示下Gin接口+mysql的增删改查案例,示例代码如下:
// demo1 project main.go package main import ( "database/sql" "log" "time" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" ) type Users struct { Id int Name string NickName string } /* * 创建数据库连接 */ func connectToDatabase() (*sql.DB, error) { db, err := sql.Open("mysql", "root:123456@tcp(192.168.31.217:33306)/test") if err != nil { return nil, err } db.SetConnMaxLifetime(time.Second * 3600 * 8) db.SetMaxOpenConns(10) db.SetMaxIdleConns(10) err = db.Ping() if err != nil { return nil, err } return db, nil } func main() { //创建数据库连接 db, err := connectToDatabase() if err != nil { panic(err) } //程序关闭的时候需要关闭掉数据库连接 defer db.Close() router := gin.Default() //用户登录 router.POST("/login", func(c *gin.Context) { username := c.PostForm("username") password := c.PostForm("password") log.Println("获取到的用户名和密码是:", username, password) rows, err := db.Query("SELECT id FROM users WHERE username = ? and password = ?", username, password) if err != nil { log.Fatal(err) } defer rows.Columns() if rows.Next() == true { c.JSON(200, gin.H{ "code": 200, "message": "登录成功", }) } else { c.JSON(200, gin.H{ "code": 400, "message": "用户名或者密码不正确", }) } }) //用户注册 router.POST("/register", func(c *gin.Context) { username := c.PostForm("username") password := c.PostForm("password") nickname := c.PostForm("nickname") log.Println("获取到的用户名和密码是:", username, password) inserSql := "insert into users(username,password,nickname) values(?,?,?)" // 创建事务 tx, err := db.Begin() if err != nil { log.Println("事务创建失败:", err) return } // 执行插入语句 _, err = tx.Exec(inserSql, username, password, nickname) //value输入具体的值 if err != nil { log.Println("插入数据失败:", err) tx.Rollback() // 回滚事L务 return } // 提交事务 err = tx.Commit() if err != nil { log.Println("提交事务失败:", err) return } c.JSON(200, gin.H{ "code": 200, "message": "注册成功", }) }) //获取用户信息 router.POST("/getUinfo/:username", func(c *gin.Context) { username := c.Param("username") var user Users querySql := "SELECT id, username, nickname FROM users WHERE username = ?" err = db.QueryRow(querySql, username).Scan(&user.Id, &user.Name, &user.NickName) if err != nil { log.Fatal(err) } c.JSON(200, gin.H{ "code": 200, "message": "注册成功", "data": user, }) }) //修改用户信息 router.POST("/updateUinfo", func(c *gin.Context) { username := c.PostForm("username") nickname := c.PostForm("nickname") updateSql := "update users set nickname= ? WHERE username = ?" _, err = db.Exec(updateSql, nickname, username) if err != nil { log.Fatal(err) } c.JSON(200, gin.H{ "code": 200, "message": "修改成功", }) }) //删除用户信息 router.POST("/deleteU/:username", func(c *gin.Context) { username := c.Param("username") updateSql := "delete from users WHERE username = ?" _, err = db.Exec(updateSql, username) if err != nil { log.Fatal(err) } c.JSON(200, gin.H{ "code": 200, "message": "删除成功", }) }) router.Run(":9000") }
这里我们演示了操作数据库相关,测试也是没有任何问题的:
大家可以参考下这里的代码。
还没有评论,来说两句吧...