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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步