当前位置:网站首页>gin中简单的curd接口例子
gin中简单的curd接口例子
2022-08-09 08:46:00 【tjg888888】
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 //数据表为user,字段分别有id,name,gender,age type User struct { ID int `json:"id"` Name string `json:"name"` Gender int `json:"gender"` Age int `json:"age"` } func main() { //初始化数据库连接池,连接信息(数据库类型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("/user", func(c *gin.Context) { //接值 Name:=c.Request.FormValue("name") Gender:=c.Request.FormValue("gender") Age:=c.Request.FormValue("age") //执行插入数据操作 rs,err:=db.Exec("insert into user (name,gender,age)values (?,?,?)",Name,Gender,Age) if err!=nil{ log.Fatalln(err) } id,err:=rs.LastInsertId() if err!=nil{ log.Fatalln(err) } msg:=fmt.Sprintf("insert successful %d",id) //最后返回json格式数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, "code":200, }) }) //查询列表 router.GET("/users", func(c *gin.Context) { name:=c.Request.FormValue("name") //执行查询操作
rows,err:=db.Query("select * from user where name like CONCAT('%',?,'%')",name)if err!=nil{ log.Fatalln(err) } //定义rows.Close操作,将数据库连接转移到rows对象上 defer rows.Close() //使用make创建一个[]User切片,而不是直接使用var users []User的声明方式.(因为使用make当数组切片没有元素时,json会返回[].而直接声明方式的话,当没有元素时,json会返回null) users:=make([]User,0) //使用rows对象Next()方法遍历数据 for rows.Next(){ //定义一个user对象 var user User //一个个绑定到user对象上 rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age) //最后append追加到users切片 users=append(users,user) } if err=rows.Err();err!=nil{ log.Fatalln(err) } //返回json格式数据 c.JSON(http.StatusOK,gin.H{ "users":users, }) }) //查询单条记录 router.GET("/user", func(c *gin.Context) { //接值 id:=c.Request.FormValue("id") //定义user对象 var user User //执行查询操作,并用Scan()方法将查询结果绑定到user对象上 err:=db.QueryRow("select * from user where id=?",id).Scan(&user.ID,&user.Name,&user.Gender,&user.Age) if err!=nil{ log.Println(err) c.JSON(http.StatusOK,gin.H{ "user":nil, }) return } //返回json数据 c.JSON(http.StatusOK,gin.H{ "user":user, }) }) //修改单条记录 router.PUT("/update", func(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} //执行修改操作 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) } //获取修改的结果(正常情况下ra返回1) ra,err:=rs.RowsAffected() if err!=nil{ log.Fatalln(err) } //返回的msg内容 msg:=fmt.Sprintf("update user %d successful %d",user.ID,ra) //返回json数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //删除某条记录 router.DELETE("delete", func(c *gin.Context) { //接值 cid:=c.Request.FormValue("id") //利用strconv函数的Atoi()方法将字符串类型cid转换为int整型 id,err:=strconv.Atoi(cid) if err!=nil{ log.Fatalln(err) } //执行删除操作 rs,err:=db.Exec("delete from user where id=?",id) if err!=nil{ log.Fatalln(err) } ra,err:=rs.RowsAffected() if err!=nil{ log.Fatalln(err) } //返回提示信息msg msg:=fmt.Sprint("delete user %d successful %d",ra,id) //返回json数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //本地监听8080端口运行该程序 router.Run("0.0.0.0:8080") }
边栏推荐
猜你喜欢
系统安全及应用
三次握手,四次挥手
leetcode 36. 有效的数独(模拟题)
Three handshakes, four waves
Notes on OpenHarmony Open Source Meeting (Nanjing Station)
Database MySQL installation and uninstallation
XCTF College War "Epidemic" Network Security Sharing Competition Misc wp
BUUCTF MISC brush notes (2)
Kibana:为地图应用选择不同的语言 - Elastic Stack 8.3
Dark Horse 2022 latest redis course notes and knowledge points (for interview)
随机推荐
1. LVGL 8.3 在 Visual Studio 2019 模拟器中的环境搭建
Non-decreasing Array
get一个小技巧,教你如何在typora写文章上传图片到博客上
The 5th Blue Cap Cup preliminary misc reappears after the game
makefile 遗漏分割符 您的意思是用TAB代替8个空格?
897. 增加订单搜索树
Where does detection go forward?
欧几里和游戏
进程和计划任务
eTS UI开发学习
leetcode 35. 搜索插入位置(二分法+找性质也很关键)
Arduino+2片74hc595 驱动8x8(共阳)点阵(1008BS)
Dark Horse 2022 latest redis course notes and knowledge points (for interview)
Use of prepareStatement
Makefile中patsubst、wildcard、notdir的使用
bs4的使用基础学习
[V&N2020 Open] Memory Forensics
磁盘管理与挂载
Tencent cloud server is modified to root login to install pagoda panel
The difference between big-endian and little-endian storage is easy to understand at a glance