GORM 提供 Session
方法,這是一個 New Session Method
,它允許使用設定檔建立新的 session 模式
// Session Configuration |
DryRun
產生 SQL
但不執行。它可用於準備或測試產生的 SQL,例如
// session mode |
若要產生最終的 SQL,可以使用以下程式碼
// NOTE: the SQL is not always safe to execute, GORM only uses it for logs, it might cause SQL injection |
PrepareStmt
PreparedStmt
在執行任何 SQL 時建立準備好的陳述式,並將它們快取以加快後續的呼叫,例如
// globally mode, all DB operations will create prepared statements and cache them |
NewDB
使用選項 NewDB
建立一個沒有條件的新 DB,例如
tx := db.Where("name = ?", "jinzhu").Session(&gorm.Session{NewDB: true}) |
Initialized
建立一個新的已初始化的 DB,它不再是方法鏈/Goroutine 安全,請參閱 方法鏈
tx := db.Session(&gorm.Session{Initialized: true}) |
Skip Hooks
如果您想略過 Hooks
方法,可以使用 SkipHooks
session 模式,例如
DB.Session(&gorm.Session{SkipHooks: true}).Create(&user) |
DisableNestedTransaction
在 DB 交易中使用 Transaction
方法時,GORM 會使用 SavePoint(savedPointName)
、RollbackTo(savedPointName)
為您提供巢狀交易支援。您可以使用 DisableNestedTransaction
選項來停用它,例如
db.Session(&gorm.Session{ |
AllowGlobalUpdate
GORM 預設不允許全域更新/刪除,會傳回 ErrMissingWhereClause
錯誤。您可以將此選項設定為 true 以啟用它,例如
db.Session(&gorm.Session{ |
FullSaveAssociations
建立/更新記錄時,GORM 會使用 Upsert 自動儲存關聯和其參考。如果您想更新關聯資料,您應該使用 FullSaveAssociations
模式,例如
db.Session(&gorm.Session{FullSaveAssociations: true}).Updates(&user) |
Context
使用 Context
選項,您可以設定後續 SQL 作業的 Context
,例如
timeoutCtx, _ := context.WithTimeout(context.Background(), time.Second) |
GORM 也提供捷徑方法 WithContext
,以下是定義
func (db *DB) WithContext(ctx context.Context) *DB { |
Logger
Gorm 允許使用 Logger
選項自訂內建記錄器,例如
newLogger := logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), |
查看 記錄器 以取得更多詳細資訊。
NowFunc
NowFunc
允許變更 GORM 取得目前時間的函式,例如
db.Session(&Session{ |
Debug
Debug
是變更 session 的 Logger
至偵錯模式的捷徑方法,以下是定義
func (db *DB) Debug() (tx *DB) { |
QueryFields
依欄位選取
db.Session(&gorm.Session{QueryFields: true}).Find(&user) |
CreateBatchSize
預設批次大小
users = [5000]User{{Name: "jinzhu", Pets: []Pet{pet1, pet2, pet3}}...} |