批里批里 (゜-゜)つ🍺 干杯~|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

Day7 gorm dao的使用 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

gorm/gen是一个没有依赖关系的生成工具,可以用于从数据库生成结构 它具有以下特點

  • 簡單,並且可以生成動態可重用的sql
  • 100%类型安全DAO API,无interface{}
  • 数据库结构遵循GORM惯例
  • GORM底层,支持GORM支持的所有功能、插件和DBMS gorm的很多常用代碼都需要自己手寫,例如dao,例如事務等 而利用gorm的代碼生成工具可以快速爲服務生成dao和model

安裝

gorm/gen的安裝方式如下

go install gorm.io/gen/tools/gentool@latest

代碼生成

語法如下

gentool -dsn "user:pwd@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" -tables "orders,doctor"

gentool還有幾個常用的選項

fieldNullable

指定字段是可選的

fieldWithIndexTag

生成的代碼包含主鍵的tag

fieldWithTypeTag

生成的代碼包含字段的tag

modelPkgName

指定生成出來的代碼的包名

outFile

指定生成出來的代碼文件的文件名,默認爲gen.go

outPath

指定生成到哪個文件夾中,默認爲./dao/query

dao的使用

gentool生成的代碼包含dao,這樣dao就不用自己手寫了 首先需要創建一個鏈接客戶端 代碼示例如下

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})  
query := dal.Use(db)

u := query.User  
  
// Get the first record ordered by primary key  
user, err := u.WithContext(ctx).First()

user := model.User{Name: "Modi", Age: 18, Birthday: time.Now()}  
  
u := query.User  
err := u.WithContext(ctx).Create(&user)

u.WithContext(ctx).Where(u.ID.Eq(111)).Updates(model.User{Name: "hello", Age: 18, Active: false})

直接刪除

u.WithContext(ctx).Where(u.ID.In(1,2,3)).Delete()

軟刪除 使用.Unscoped()就可以軟刪除字段

o.WithContext(ctx).Unscoped().Where(o.ID.Eq(10)).Delete()

事務

使用事务函数的例子如下

q := query.Use(db)  
  
q.Transaction(func(tx *query.Query) error {  
  if _, err := tx.User.WithContext(ctx).Where(tx.User.ID.Eq(100)).Delete(); err != nil {  
    return err  
  }  
  if _, err := tx.Article.WithContext(ctx).Create(&model.User{Name:"modi"}); err != nil {  
    return err  
  }  
  return nil  
})

本文作者:七つ一旋桜

本文链接:https://www.cnblogs.com/poifa/p/17716922.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(94)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起