当前位置:网站首页>gin中模型中增删改查+搜索分页
gin中模型中增删改查+搜索分页
2022-08-09 08:46:00 【tjg888888】
模型里代码:
package models import ( db "awesomeProject/databases" "fmt" _ "gopkg.in/gin-gonic/gin.v1/json" ) type User struct { ID int `json:"id"` Name string `json:"name"` Gender int `json:"gender"` Age int `json:"age"` } //增加 func (user *User) AddUser() bool { var rs, err = db.SqlDB.Exec("insert into user (name,gender,age)value (?,?,?)", user.Name, user.Gender, user.Age) if err!=nil{ return false } id,err:=rs.LastInsertId() fmt.Println(id) if err!=nil{ return false }else{ return true } } //修改 func (user *User) EditUser() bool { rs,err:=db.SqlDB.Exec("update user set name=?,gender=?,age=? where id=?",user.Name,user.Gender,user.Age,user.ID) if err!=nil{ return false } id,err:=rs.RowsAffected() if err!=nil{ return false }else { fmt.Println(id) return true } } //删除 func DeleteUser(Id int) bool { rs,err:=db.SqlDB.Exec("Delete from user where id=?",Id) if err!=nil{ return false } id,err:=rs.RowsAffected() if err!=nil{ return false }else { fmt.Println(id) return true } } //列表 func GetUserList(pageno,pagesize int,search string)(users []User) { //fmt.Println("搜索关键词",search) users=make([]User,0) //sql搜索分页查询语句 if search!=""{ rows,err:=db.SqlDB.Query("select * from user where name like '%"+search+"%' limit ?,?",(pageno-1)*pagesize,pagesize) //fmt.Println(rows.Close()) if err!=nil{ return nil } defer rows.Close() //数据添加到数据集中 for rows.Next(){ var user User rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age) users=append(users,user) } //fmt.Println(users) if err = rows.Err(); err != nil { return nil } }else{ rows,err:=db.SqlDB.Query("select * from user limit ?,?",(pageno-1)*pagesize,pagesize) //fmt.Println(rows.Close()) if err!=nil{ return nil } defer rows.Close() //数据添加到数据集中 for rows.Next(){ var user User rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age) users=append(users,user) //fmt.Println(users) } if err = rows.Err(); err != nil { return nil } } return users } //用户数 func GetUserNum(search string)int{ num:=0; //查询分页语句 if search!=""{ rows,err:=db.SqlDB.Query("select * from user where name like '%"+search+"%'") if err!=nil{ return 0 } defer rows.Close() for rows.Next(){ num++; } }else { rows,err:=db.SqlDB.Query("select * from user") if err!=nil{ return 0 } defer rows.Close() for rows.Next(){ num++ } } return num } //获取单条数据 func GetUserById(Id int)(users * User) { var user User err:=db.SqlDB.QueryRow("select * from user where id=?",Id).Scan(&user.ID,&user.Name,&user.Gender,&user.Age) if err!=nil{ fmt.Println(err) } return &user }
//根目录下main.go文件里代码:
package main import ( "database/sql" "github.com/gin-gonic/gin" "log" "net/http" "strconv" "awesomeProject/models" ) 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:=models.User{ Name:name, Gender: gender, Age: age, } //调用模型中增加方法 user.AddUser() } //查询列表接口 func ListUserApi(c *gin.Context) { //参数 search:=c.Request.FormValue("search") num:=c.Request.FormValue("pageno") pageno,_:=strconv.Atoi(num) if err!=nil{ log.Fatalln(err) } //得到数据集 datalist:=models.GetUserList(pageno,1,search) //得到记录的总数 count:=models.GetUserNum(search) c.JSON(http.StatusOK,gin.H{ "datalist":datalist, "count":count, "pagesize":1, "pageno":pageno, }) } //查询单条记录接口 func FindUserApi(c *gin.Context) { //参数 ids:=c.Request.FormValue("id"); id,_:=strconv.Atoi(ids); res:=models.GetUserById(id); c.JSON(http.StatusOK,gin.H{ "res":res, "code":200, }) } //修改单条记录接口 func UpdateUserApi(c *gin.Context) { //接值 ids:=c.Request.FormValue("id"); id,_:=strconv.Atoi(ids); name:=c.Request.FormValue("name") cgender:=c.Request.FormValue("gender") gender,_:=strconv.Atoi(cgender) cage:=c.Request.FormValue("age") age,_:=strconv.Atoi(cage) //赋值 user:=models.User{ ID:id, Name:name, Gender: gender, Age: age, } //调用模型中修改方法 user.EditUser() c.JSON(http.StatusOK,gin.H{ "msg":"修改成功", "code":200, }) } //删除某条记录接口 func DeleteUserApi(c *gin.Context) { //接值 ids:=c.Request.FormValue("id"); id,_:=strconv.Atoi(ids); models.DeleteUser(id) c.JSON(http.StatusOK,gin.H{ "msg":"删除成功", "code":200, }) }
边栏推荐
- 引导过程与服务控制
- uva11624 Fire! (双bfs)
- eTS UI development learning
- leetcode 36. 有效的数独(模拟题)
- [MySQL]mysql: Solve the problem of [Err] 1093 - You can't specify target table 'table name' for update in FROM clause
- 基于appinventor与EasyDL物体检测API的物体检测app
- 【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
- 电子产品整机结构设计的一般性思路
- QT program generates independent exe program (pit-avoiding version)
- Where does detection go forward?
猜你喜欢
零搜索量的关键词,你需要布局吗?
【CNN】2022 ECCV 对比视觉Transformer的在线持续学习
加密技术和电子竞技如何促进彼此的发展
QT program generates independent exe program (pit-avoiding version)
Redis redis 】 【 the expiration of listening
The principle and configuration of VLAN
Getting started with ctfshow-web Part of the file upload part solution
bs4之爬取诗词学习
路由配置转发及实验
UE4 RTS frame selection function implementation
随机推荐
System transformation and subnetting
EMQ X message server learning record - prepare for the subsequent completion
bs4之爬取诗词学习
Literature retrieval operation code
大端小端存储区别一看即懂
makefile的foreach、filter、filter-out函数
UE4 RTS frame selection function implementation
web basic concepts
uva11624 Fire! (双bfs)
VLAN的原理及配置
The embedded serial port interrupt can only receive one byte
Getting started with ctfshow-web Part of the file upload part solution
Use of prepareStatement
Static routing principle and configuration
磁盘管理与挂载
内存中的swap机制
【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
正则表达式基础介绍
Conversion between number systems
【GNN】2022 G-Mixup: Graph Data Augmentation for Graph Classification