GORMは Session
メソッドを提供しています。これは 新しいセッションを作成するメソッド
であり、設定可能な新しいセッションを作成することができます。
// Session Configuration |
DryRun
実行はせずに SQL
の生成のみ行います。 生成されたSQLを前もって準備またはテストする際に使用することができます。例:
// session mode |
最終的なSQLを生成するには、次のコードを使用します。
// 注意: この方法で生成されるSQLは常に安全に実行できるとは限りません。 |
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
Create a new initialized DB, which is not Method Chain/Goroutine Safe anymore, refer Method Chaining
tx := db.Session(&gorm.Session{Initialized: true}) |
Skip Hooks
If you want to skip Hooks
methods, you can use the SkipHooks
session mode, for example:
DB.Session(&gorm.Session{SkipHooks: true}).Create(&user) |
DisableNestedTransaction
When using Transaction
method inside a DB transaction, GORM will use SavePoint(savedPointName)
, RollbackTo(savedPointName)
to give you the nested transaction support. You can disable it by using the DisableNestedTransaction
option, for example:
db.Session(&gorm.Session{ |
AllowGlobalUpdate
GORM doesn’t allow global update/delete by default, will return ErrMissingWhereClause
error. You can set this option to true to enable it, for example:
db.Session(&gorm.Session{ |
FullSaveAssociations
GORM will auto-save associations and its reference using Upsert when creating/updating a record. If you want to update associations’ data, you should use the FullSaveAssociations
mode, for example:
db.Session(&gorm.Session{FullSaveAssociations: true}).Updates(&user) |
Context
With the Context
option, you can set the Context
for following SQL operations, for example:
timeoutCtx, _ := context.WithTimeout(context.Background(), time.Second) |
GORM also provides shortcut method WithContext
, here is the definition:
func (db *DB) WithContext(ctx context.Context) *DB { |
Logger
Gorm allows customizing built-in logger with the Logger
option, for example:
newLogger := logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), |
Checkout Logger for more details.
NowFunc
NowFunc
allows changing the function to get current time of GORM, for example:
db.Session(&Session{ |
Debug
Debug
is a shortcut method to change session’s Logger
to debug mode, here is the definition:
func (db *DB) Debug() (tx *DB) { |
QueryFields
Select by fields
db.Session(&gorm.Session{QueryFields: true}).Find(&user) |
CreateBatchSize
Default batch size
users = [5000]User{{Name: "jinzhu", Pets: []Pet{pet1, pet2, pet3}}...} |