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}}...} |