package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"net/http"
)
type Person struct {
Id int `form:"id" json:"id" uri:"id" xml:"id" gorm:"primaryKey;autoIncrement;"`
Name string `form:"name" json:"name" uri:"name" xml:"name" gorm:"type:varchar(50)"`
Age int `form:"age" json:"age" uri:"age" xml:"age"`
Sex string `form:"sex" json:"sex" uri:"sex" xml:"sex" gorm:"type:varchar(4)"`
Salary float64 `form:"salary" json:"salary" uri:"salary" xml:"salary" gorm:"type:decimal(10, 2) NULL DEFAULT 0"`
//User User //`gorm:"foreignkey:UserID;association_foreignkey:ID"`
}
func (p *Person) TableName() string {
return "got_person"
}
func main() {
dsn := "root:mysql88.8@tcp(127.0.0.1:3306)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
db.AutoMigrate(&Person{})
p := Person{
Name: "汉三",
Age: 18,
Sex: "女",
}
//添加一条记录
db.Create(&p)
//批量查询
var persons []Person
db.Limit(10).Offset(2).Where("id in (?)", []int{1, 2}).Find(&persons)
fmt.Println(persons)
//分页查询
db.Limit(10).Offset(2).Where("id >?", 1).Find(&persons)
fmt.Println(persons)
var one Person
db.Where("id =?", 1).First(&one)
fmt.Println(one)
//修改单个属性
err = db.Where("id =?", 1).First(&one).Update("name", "lisi").Error
if err != nil {
fmt.Println(err)
}
//通过map修改多个字段
err = db.Where("id =?", 3).First(&Person{}).Updates(map[string]interface{}{
"name": "hello",
"age": 45,
}).Error
if err != nil {
fmt.Println(err)
}
//通过结构体修改多个字段
err = db.Where("id =?", 1).First(&one).Updates(Person{
Name: "王五",
Age: 23,
Sex: "女",
}).Error
if err != nil {
fmt.Println(err)
}
//删除,Unscoped()物理删除
db.Where("id=?", 2).Unscoped().Delete(&Person{})
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": map[string]interface{}{
"name": "占山",
},
"message": "请求成功",
})
})
//http://localhost:8080/bindUri/12/战三/28/男
router.GET("/bindUri/:id/:name/:age/:sex", func(c *gin.Context) {
name := c.Query("name")
var p = Person{}
// err := c.ShouldBindJSON(&p)
err := c.BindUri(&p)
if err != nil {
fmt.Println(err)
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": map[string]interface{}{
"name": name,
},
"person": p,
"message": "请求成功",
})
})
//http://localhost:8080/param?name=zhansan&id=12&age=28&sex=男
router.GET("/param", func(c *gin.Context) {
name := c.Query("name")
var p = Person{}
// err := c.ShouldBindJSON(&p)
err := c.BindQuery(&p)
if err != nil {
fmt.Println(err)
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": map[string]interface{}{
"name": name,
},
"person": p,
"message": "请求成功",
})
})
/**
POST
http://localhost:8080/post
{
"id": 12,
"name": "占山",
"age":18,
"sex": "男"
}
*/
router.POST("/post", func(c *gin.Context) {
name := c.Query("name")
fmt.Println(name)
var p = Person{}
err := c.ShouldBindJSON(&p)
if err == nil {
fmt.Println(err)
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": map[string]interface{}{
"name": "占山",
},
"person": p,
"message": "请求成功",
})
})
router.POST("/upload", func(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
}
name := c.PostForm("name")
c.SaveUploadedFile(file, "d:/"+file.Filename)
c.JSON(http.StatusOK, gin.H{
"code": "ok",
"data": file.Filename,
"message": "上传成功",
"name": name,
})
})
router.POST("/uploadDown", func(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
}
c.SaveUploadedFile(file, "d:/"+file.Filename)
name := c.PostForm("name")
fmt.Println(name)
//c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "test"))//fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
//c.Writer.Header().Add("Content-Type", "application/octet-stream")
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", file.Filename))
//_, _ = io.Copy(c.Writer, reader)
c.File("d:/" + file.Filename)
})
router.POST("/uploads", func(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
}
files := form.File["file"]
for _, fv := range files {
//fmt.Println(i, fv)
c.SaveUploadedFile(fv, "d:/"+fv.Filename)
}
c.JSON(http.StatusOK, gin.H{
"code": "ok",
"data": "sdf",
"message": "上传成功",
})
})
router.Run(":8081")
}
gin gorm常用操作
最新推荐文章于 2024-07-12 09:17:55 发布