前面我们使用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")
}这里我们演示了操作数据库相关,测试也是没有任何问题的:
大家可以参考下这里的代码。










还没有评论,来说两句吧...