日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gin使用GORM进行CURD2

發布時間:2023/12/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gin使用GORM进行CURD2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

接上文:https://juejin.cn/post/7100627175878950948

1、 Gin GORM CURD

1、用指定的字段增加數據

```go //寫一個User結構體實例賦值給user user := User{ Name: "小明", Age: 12, Birthday: time.Now() } //我們可以指定某一個字段插入數據 db.Select("Name", "Age", "CreatedAt").Create(&user) //相當于使用INSERT語句指定字段插入數據

//Omit忽略某些字段不插入,其他得字段插入數據,也就是說Name、Age、Create三個字段不插入數據,其余得均從user中獲取并插入數據 db.Omit("Name", "Age", "CreatedAt").Create(&user)

```

2、批量插入

1、法一

//將一個?切片?傳遞給?`Create`?方法 var users = []User{{Name: "小明"}, {Name: "小紅"}, {Name: "小芳"}} //GORM 將生成單獨一條SQL語句來插入所有數據 db.Create(&users) //回填主鍵的值,鉤子方法也會被調用。 for _, user := range users { user.ID // 1,2,3 }

2、法二:

使用?CreateInBatches?分批創建 ```go var users = []User{{name: "小明1"}, ...., {Name: "小明999"}}

// 指定每批得數量為99 db.CreateInBatches(users, 99) ```

注意:使用CreateBatchSize?選項初始化 GORM 時,所有的創建& 關聯?INSERT?都將遵循以下選項 ```go //打開數據庫,CreateBatchSize配置 db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ CreateBatchSize: 1000, }) //session db := db.Session(&gorm.Session{CreateBatchSize: 1000}) //切片方法 users = [5000]User{{Name: "小明", Pets: []Pet{pet1, pet2, pet3}}...}

db.Create(&users) ```

3、創建鉤子(hook)

Hook 是在創建、查詢、更新、刪除等操作之前、之后調用的函數。 有?BeforeSave,?BeforeCreate,?AfterSave,?AfterCreate這四個hook方法 如果你為hook模型定義了指定的方法,它會在增刪改查時自動被調用。任何一個回調返回錯誤,GORM 將停止后續的操作并回滾事務。 go //使用BeforeCreate方法 func (u *User) BeforeCreate(tx *gorm.DB) (err error) { //當前唯一序列號 u.UUID = uuid.New() //角色 if u.Role == "admin" { //返回錯誤 return errors.New("invalid role") } return } 跳過hook的方法 DB.Session(&gorm.Session{SkipHooks: true}).Create(&user)

4、Map創建

GORM 支持根據?map[string]interface{}?和?[]map[string]interface{}{}?創建記錄 ``` 使用map鍵值對的方法 db.Model(&User{}).Create(map[string]interface{}{ "Name": "小明", "Age": 12, })

// 批量插入 db.Model(&User{}).Create([]map[string]interface{}{ {"Name": "小明1", "Age": 12}, {"Name": "小明2", "Age": 23}, }) ```

5、使用 SQL 表達式、Context Valuer 創建記錄

GORM 允許使用 SQL 表達式插入數據

法一:

根據?map[string]interface{}創建

go // 通過 map 創建記錄 db.Model(User{}).Create(map[string]interface{}{ "Name": "小明", "Location": clause.Expr{SQL: "ST_PointFromText(?)", Vars: []interface{}{"POINT(222 333)"}}, })

法二:自定義數據類型創建

```go // 通過自定義類型創建記錄 type Location struct { X, Y int }

// Scan 方法實現了 sql.Scanner 接口 func (loc *Location) Scan(v interface{}) error {

}

func (loc Location) GormDataType() string { return "geometry" }

func (loc Location) GormValue(ctx context.Context, db *gorm.DB) clause.Expr { return clause.Expr{ SQL: "ST_PointFromText(?)", Vars: []interface{}{fmt.Sprintf("POINT(%d %d)", loc.X, loc.Y)}, } }

type User struct { Name string Location Location }

db.Create(&User{ Name: "jinzhu", Location: Location{X: 100, Y: 100}, }) ``` 更多高級用法,讓你的代碼更優雅,移步官方文檔:https://gorm.io/zh_CN/docs/create.html

總結

以上是生活随笔為你收集整理的Gin使用GORM进行CURD2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。