mysql例子 restful_gin+mysql实现Restful风格的API

这篇博客提供了一个简单的教程,展示了如何利用Gin框架和MySQL数据库创建RESTful风格的API。从安装数据库和工具开始,接着创建数据库表,安装MySQL驱动,初始化连接池,然后逐步实现了增、删、改、查四种基本操作。代码示例覆盖了创建用户、删除用户、更新用户信息以及查询单个和多个用户记录的功能。
摘要由CSDN通过智能技术生成

入门小实例

package main

import (

"github.com/gin-gonic/gin"

)

func main() {

r := gin.Default()

r.GET("/hello",func(c *gin.Context) {

c.JSON(200,gin.H{"message":"helloworld",})

})

r.Run(":8082")

}

电脑上安装mysql数据库和navcateMySQL 安装 | 菜鸟教程​www.runoob.com支持 MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理​www.navicat.com.cn

创建一个数据库和张表

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(40) NOT NULL DEFAULT '',

`age` int(22) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

安装操作mysql驱动

go get -u github.com/go-sql-driver/mysql

初始化连接池

package main

import (

"database/sql"

"fmt"

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

)

// 定义一个全局对象db

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "user:password@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

使用sql.Open方法会创建一个数据库连接池db。这个db不是数据库连接,它是一个连接池,只有当真正数据库通信的时候才创建连接。例如这里的db.Ping的操作。db.SetMaxIdleConns(20)和db.SetMaxOpenConns(20)分别设置数据库的空闲连接和最大打开连接,即向Mysql服务端发出的所有连接的最大数目。

package main

import (

"database/sql"

"fmt"

"github.com/gin-gonic/gin"

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

)

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

}

func main( ) {

err := initDB()

if err != nil {

fmt.Println("连接数据库失败",err)

return

}

r := gin.Default()

r.POST("/user",func(c *gin.Context) {

var user User

c.BindJSON(&user)

rs, err := db.Exec("INSERT INTO users(name, age) VALUES (?, ?)", user.Name, user.Age)

if err != nil {

fmt.Println("插入数所库失败",err)

return

}

id, err := rs.LastInsertId()

msg := fmt.Sprintf("insert successful %d", id)

c.JSON(200,gin.H{"msg":msg})

})

r.Run(":8082")

}

查看数据库

package main

import (

"database/sql"

"fmt"

"github.com/gin-gonic/gin"

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

)

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

}

//删

func main() {

err := initDB()

if err != nil {

fmt.Println("连接数据库失败",err)

return

}

r := gin.Default()

r.GET("/user",func(c *gin.Context) {

id := c.Query("id")

rs, err := db.Exec("DELETE FROM users WHERE id=?", id)

if err != nil {

fmt.Println("删除失败",err)

return

}

ra, err := rs.RowsAffected()

if err != nil {

fmt.Println(err)

return

}

msg := fmt.Sprintf("Delete users %d successful %d", id, ra)

c.JSON(200,gin.H{"msg":msg})

})

r.Run(":8082")

}

查看数据库

package main

import (

"database/sql"

"fmt"

"github.com/gin-gonic/gin"

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

)

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

}

//改

func main() {

err := initDB()

if err != nil {

fmt.Println("数据库连接失败",err)

return

}

r := gin.Default()

r.POST("/user",func(c *gin.Context) {

var user User

c.BindJSON(&user)

stmt, err := db.Prepare("UPDATE users SET name=?, age=? WHERE id=?")

if err != nil {

fmt.Println("预处理失败",err)

return

}

defer stmt.Close()

rs, err := stmt.Exec(user.Name, user.Age, user.ID)

if err != nil {

fmt.Println("更新数据失败",err)

return

}

ra, err := rs.RowsAffected()

if err != nil {

fmt.Println("更新当前行失败",err)

return

}

msg := fmt.Sprintf("Update user %d successful %d", user.ID, ra)

c.JSON(200,gin.H{"msg":msg})

})

r.Run(":8082")

}

查看数据库

查单条记录

package main

import (

"database/sql"

"fmt"

"github.com/gin-gonic/gin"

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

)

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

}

func main() {

err := initDB()

if err != nil {

fmt.Println("连接数据库失败",err)

return

}

r := gin.Default()

r.GET("/user/:id",func(c *gin.Context) {

var user User

id := c.Param("id")

err := db.QueryRow("SELECT id, name, age FROM users WHERE id=?", id).Scan(

&user.ID, &user.Name, &user.Age,

)

if err != nil {

fmt.Println("查询失败",err)

return

}

c.JSON(200,gin.H{"code":200,"msg":"SUCCESS","data":user})

})

r.Run(":8082")

}

查询多条

package main

import (

"database/sql"

"fmt"

"github.com/gin-gonic/gin"

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

)

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

}

//查询多条

func main() {

err := initDB()

if err != nil {

fmt.Println("连接数据库失败",err)

return

}

r := gin.Default()

r.GET("/user",func(c *gin.Context) {

users := make([]User, 0)

rows, err := db.Query("SELECT id, name, age FROM users")

if err != nil {

fmt.Println("查询失败",err)

return

}

defer rows.Close()

for rows.Next() {

var user User

rows.Scan(&user.ID, &user.Name, &user.Age)

users = append(users,user)

}

c.JSON(200,gin.H{"code":200,"msg":"SUCCESS","data":users})

})

r.Run(":8082")

}

查看数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值