gin gorm常用操作

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")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gin 框架中,通常需要使用 ORM(对象关系映射)库来操作数据库。常用的 ORM 库有 GORM、XORM、Beego ORM 等,这里以 GORM 为例来说明如何批量创建不同的表数据。假设我们有三个表:User、Article、Comment。 首先,我们需要定义这三个表的结构体,例如: ```go type User struct { ID uint Name string Age int } type Article struct { ID uint Title string Content string } type Comment struct { ID uint ArticleID uint Content string } ``` 然后,我们可以使用 GORM 来批量创建不同的表数据,例如: ```go // 创建用户 users := []User{ {Name: "Alice", Age: 20}, {Name: "Bob", Age: 30}, {Name: "Charlie", Age: 40}, } db.Create(&users) // 创建文章 articles := []Article{ {Title: "Gin tutorial", Content: "This is a Gin tutorial."}, {Title: "GORM tutorial", Content: "This is a GORM tutorial."}, {Title: "XORM tutorial", Content: "This is a XORM tutorial."}, } db.Create(&articles) // 创建评论 comments := []Comment{ {ArticleID: 1, Content: "Nice tutorial!"}, {ArticleID: 2, Content: "Great tutorial!"}, {ArticleID: 3, Content: "Awesome tutorial!"}, } db.Create(&comments) ``` 在上面的代码中,我们分别创建了三个表的数据,并使用 `Create` 方法将数据插入到数据库中。 需要注意的是,上面的代码假设我们已经成功连接到了数据库,并且已经通过 GORM 创建了相应的表。如果还没有创建相应的表,可以使用 GORM 的 `AutoMigrate` 方法来自动创建表。例如: ```go // 自动创建表 db.AutoMigrate(&User{}, &Article{}, &Comment{}) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值