GORM は 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 を作成します。これは、もはやメソッドチェーン/ゴルーチンセーフではありません。 メソッドチェーン を参照してください。
tx := db.Session(&gorm.Session{Initialized: true}) |
Skip Hooks
Hooks メソッドをスキップする場合は、SkipHooks セッションモードを使用できます。例えば、
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 は、セッションの 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}}...} |