package main
import (
"database/sql"
"fmt"
"strconv"
"github.com/gin-gonic/gin"
"net/http"
_ "github.com/jinzhu/gorm/dialects/sqlite"
_"github.com/go-sql-driver/mysql"
"log"
)
var db *sql.DB
var err error
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Gender int `json:"gender"`
Age int `json:"age"`
}
func main() {
var err error
//初始化數據庫連接池,連接信息(數據庫類型mysql,數據庫用戶名root,數據庫密碼爲空,數據庫ip:127.0.0.1,端口3306,數據庫名imooc)
db,err=sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/imooc?parseTime=true")
if err != nil{
log.Fatalln(err)
}
//定義數據庫操作
defer db.Close()
//設置數據庫空閒連接
db.SetMaxIdleConns(20)
//設置數據庫最大打開連接
db.SetMaxOpenConns(20)
if err := db.Ping(); err != nil{
log.Fatalln(err)
}
//設置路由
router := gin.Default()
//增加一條記錄
router.POST("/add",AddUserApi)
//查詢列表
router.GET("/list",ListUserApi)
//查詢單條記錄
router.GET("/find",FindUserApi)
//修改單條記錄
router.PUT("/update",UpdateUserApi)
//刪除某條記錄
router.DELETE("delete",DeleteUserApi)
//本地監聽8080端口運行該程序
router.Run("0.0.0.0:8080")
}
//增加接口
func AddUserApi(c *gin.Context) {
//接值
name:=c.Request.FormValue("name")
cgender:=c.Request.FormValue("gender")
gender,_:=strconv.Atoi(cgender)
cage:=c.Request.FormValue("age")
age,_:=strconv.Atoi(cage)
user:=User{
Name:name,
Gender: gender,
Age: age,
}
id:=user.Create()
msg:=fmt.Sprintf("insert successful %d",id)
//最後返回json格式數據
c.JSON(http.StatusOK,gin.H{
"msg":msg,
})
}
//增加
func (user *User) Create() interface{} {
rs,err:=db.Exec("insert into user (name,gender,age)value (?,?,?)",user.Name,user.Gender,user.Age)
if err!=nil{
log.Fatalln(err)
}
id,err:=rs.LastInsertId()
if err!=nil{
log.Fatalln(err)
}
return id
}
//查詢列表接口
func ListUserApi(c *gin.Context) {
rs,_:=getRows()
c.JSON(http.StatusOK,gin.H{
"list":rs,
})
}
//查詢列表
func getRows() (users []User,err error) {
rows,err:=db.Query("select * from user")
for rows.Next() {
user:=User{}
err :=rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age)
if err!=nil{
log.Fatalln(err)
}
users=append(users,user)
}
rows.Close()
return
}
//查詢單條記錄接口
func FindUserApi(c *gin.Context) {
//接值
ids:=c.Request.FormValue("id")
id,_:=strconv.Atoi(ids)
rs,_:=getRow(id)
c.JSON(http.StatusOK,gin.H{
"result":rs,
})
}
//查詢單條
func getRow(id int) (user User,err error) {
user =User{}
err=db.QueryRow("select * from user where id=?",id).Scan(&user.ID,&user.Name,&user.Gender,&user.Age)
return
}
//修改單條記錄接口
func UpdateUserApi(c *gin.Context) {
//接值
cid:=c.Request.FormValue("id")
id,_:=strconv.Atoi(cid)//將字符串類型轉換成int操作,int轉字符串: Itoa()
name:=c.Request.FormValue("name")
cgender:=c.Request.FormValue("gender")
gender,_:=strconv.Atoi(cgender)
cage:=c.Request.FormValue("age")
age,_:=strconv.Atoi(cage)
//創建user對象
user:=User{ID: id,Name:name,Gender:gender,Age:age}
row:=user.Update()
//返回的msg內容
msg:=fmt.Sprintf("update user successful %d",row)
//返回json數據
c.JSON(http.StatusOK,gin.H{
"msg":msg,
})
}
//修改
func (user *User)Update()int64 {
rs,err:=db.Exec("update user set name=?,gender=?,age=? where id=?",user.Name,user.Gender,user.Age,user.ID)
if err!=nil{
log.Fatalln(err)
}
rows,err:=rs.RowsAffected()
if err!=nil{
log.Fatalln(err)
}
return rows
}//刪除接口
func DeleteUserApi(c *gin.Context) {
//接值
cid:=c.Request.FormValue("id")
//利用strconv函數的Atoi()方法將字符串類型cid轉換爲int整型
id,_:=strconv.Atoi(cid)
row := Delete(id)
//返回提示信息msg
msg:=fmt.Sprint("delete successful %d",row)
//返回json數據
c.JSON(http.StatusOK,gin.H{
"msg":msg,
})
}
//刪除
func Delete(id int) interface{} {
rs,err:=db.Exec("delete from user where id=?",id)
if err!=nil{
log.Fatal()
}
rows,err:=rs.RowsAffected()
if err!=nil{
log.Fatal()
}
return rows
}