mysql例子 restful_Gin实战:Gin+Mysql简单的Restful风格的API

CURD 增删改查

Restful的基本就是对资源的curd操作。下面开启我们的第一个api接口,增加一个资源。

var db *sql.DB

type Person struct {

Id int `json:"id" form:"id"`

Name string `json:"name" form:"name"`

Telephone string `json:"telephone" form:"telephone"`

}

func main() {

...//增加一条记录

router.POST("/add", func(c *gin.Context) {

name := c.Request.FormValue("name")

telephone := c.Request.FormValue("telephone")

person :=Person{

Name:name,

Telephone:telephone,

}

id :=person.Create()

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

c.JSON(http.StatusOK, gin.H{"msg": msg,

})

})

...

}//插入

func (person *Person) Create() int64 {

rs, err := db.Exec("INSERT into users (name, telephone) value (?,?)", person.Name, person.Telephone)if err !=nil{

log.Fatal(err)

}

id, err :=rs.LastInsertId()if err !=nil{

log.Fatal(err)

}returnid

}

func checkErr(err error) {if err !=nil{

panic(err)

}

}

执行非query操作,使用db的Exec方法,在mysql中使用?做占位符。最后我们把插入后的id返回给客户端。请求得到的结果如下:

查询列表 Query

上面我们增加了一条记录,下面就获取这个记录,查一般有两个操作,一个是查询列表,其次就是查询具体的某一条记录。两种大同小异。

为了给查询结果绑定到golang的变量或对象,我们需要先定义一个结构来绑定对象。

router.GET("/users", func(c *gin.Context) {

rs, _ :=getRows()

c.JSON(http.StatusOK, gin.H{"list": rs,

})

})//查询所有记录

func getRows() (persons []Person, err error) {

rows, err := db.Query("select id,name,telephone from users")forrows.Next(){

person :=Person{}

err := rows.Scan(&person.Id, &person.Name, &person.Telephone)if err !=nil {

log.Fatal(err)

}

persons=append(persons, person)

}

rows.Close()return}

返回结果如下:

查询单条记录 QueryRow

查询列表需要使用迭代rows对象,查询单个记录,就没这么麻烦了。虽然也可以迭代一条记录的结果集。因为查询单个记录的操作实在太常用了,因此golang的database/sql也专门提供了查询方法

router.GET("/users/:id", func(c *gin.Context) {

id_string := c.Param("id")

id, _ :=strconv.Atoi(id_string)

rs, _ :=getRow(id)

c.JSON(http.StatusOK, gin.H{"result": rs,

})

})//查询一条记录

func getRow(id int) (person Person, err error) {

person=Person{}

err= db.QueryRow("select id,name,telephone from users where id = ?", id).Scan(&person.Id, &person.Name, &person.Telephone)return}

返回结果如下:

增删改查,下面进行更新的操作。

router.POST("/users/update", func(c *gin.Context) {

ids := c.Request.FormValue("id")

id, _ :=strconv.Atoi(ids)

telephone := c.Request.FormValue("telephone")

person :=Person{

Id:id,

Telephone:telephone,

}

row :=person.Update()

msg := fmt.Sprintf("updated successful %d", row)

c.JSON(http.StatusOK, gin.H{"msg": msg,

})

})/修改

func (person*Person) Update() int64{

rs, err := db.Exec("update users set telephone = ? where id = ?", person.Telephone, person.Id)if err !=nil {

log.Fatal(err)

}

rows, err :=rs.RowsAffected()if err !=nil {

log.Fatal(err)

}returnrows

}

返回结果如下:

最后一个操作就是删除了,删除所需要的功能特性,上面的例子都覆盖了。实现删除也就特别简单了:

//删除一条记录

router.POST("/users/del", func(c *gin.Context) {

ids := c.Request.FormValue("id")

id, _ :=strconv.Atoi(ids)

row :=Delete(id)

msg := fmt.Sprintf("delete successful %d", row)

c.JSON(http.StatusOK, gin.H{"msg": msg,

})

})

func Delete(idint) int64 {

rs, err := db.Exec("delete from users where id = ?", id)if err !=nil {

log.Fatal()

}

rows, err :=rs.RowsAffected()if err !=nil {

log.Fatal()

}returnrows

}

返回结果:

至此,基本的CURD操作的restful风格的API已经完成。内容其实不复杂,甚至相当简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值