当前位置:网站首页>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 37. 解数独 (困难)
- 【MySQL】mysql:解决[Err] 1093 - You can‘t specify target table ‘表名‘ for update in FROM clause问题
- VMware virtual machine cannot be connected to the Internet after forced shutdown
- get一个小技巧,教你如何在typora写文章上传图片到博客上
- ASEMI整流桥GBJ810参数,GBJ810封装,GBJ810重量
- 【GNN终身学习】2022 CVPR 终身图学习
- nodeMCU(ESP8266)和RC522的接线图
- Non-decreasing Array
- LAN技术-6MSTP
- 【redis】使用redis实现简单的分布式锁,秒杀并发场景可用
猜你喜欢
正则之re模块
VMware virtual machine cannot be connected to the Internet after forced shutdown
第五届蓝帽杯初赛 misc 赛后复现
Object detection app based on appinventor and EasyDL object detection API
系统安全及应用
Processes and Scheduled Tasks
Dark Horse 2022 latest redis course notes and knowledge points (for interview)
leetcode 33. 搜索旋转排序数组 (二分经典题)
get一个小技巧,教你如何在typora写文章上传图片到博客上
OpenHarmony Light Smart Product Development Live Notes
随机推荐
1. LVGL 8.3 在 Visual Studio 2019 模拟器中的环境搭建
大端小端存储区别一看即懂
数据解析之bs4学习
897. 增加订单搜索树
BUUCTF MISC刷题笔记(一)
长辈相亲
三次握手,四次挥手
Object detection app based on appinventor and EasyDL object detection API
makefile的foreach、filter、filter-out函数
The principle and configuration of VLAN
静态路由原理与配置
leetcode 33. 搜索旋转排序数组 (二分经典题)
Three handshakes, four waves
解决iframe跳转时父页面仍然存在的问题
Xpath之爬取全国城市名称学习
matlab——解线性方程组 与 非线性方程组
MySQL数据库
hdu2191 多重背包(2016xynu暑期集训检测 -----B题)
Literature retrieval operation code
【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式