Advanced Topics
GORM 配置
登录后可跨设备保存划线和私人笔记登录
GORM 提供了可在初始化时使用的配置选项
type Config struct {
SkipDefaultTransaction bool
NamingStrategy schema.Namer
Logger logger.Interface
NowFunc func() time.Time
DryRun bool
PrepareStmt bool
DisableNestedTransaction bool
AllowGlobalUpdate bool
DisableAutomaticPing bool
DisableForeignKeyConstraintWhenMigrating bool
}跳过默认事务
GORM 在执行写入操作(创建/更新/删除)时会在事务中运行以确保数据一致性,若无需此特性可在初始化时禁用
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
SkipDefaultTransaction: true,
})命名策略
GORM 允许用户通过覆盖默认的 NamingStrategy 来修改命名约定,该策略需实现 Namer 接口
type Namer interface {
TableName(table string) string
SchemaName(table string) string
ColumnName(table, column string) string
JoinTableName(table string) string
RelationshipFKName(Relationship) string
CheckerName(table, column string) string
IndexName(table, column string) string
}默认的 NamingStrategy 也提供了一些可选配置,例如:
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TablePrefix: "t_",
SingularTable: true,
NoLowerCase: true,
NameReplacer: strings.NewReplacer("CID", "Cid"),
},
})日志记录器
通过覆盖此选项可更改 GORM 的默认日志记录器,详情请参考 Logger 文档
时间函数
修改创建新时间戳时使用的函数
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
NowFunc: func() time.Time {
return time.Now().Local()
},
})空运行模式
生成 SQL 但不执行,可用于准备或测试生成的 SQL 语句,详情请参考 Session 文档
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
DryRun: false,
})预编译语句
PreparedStmt 会在执行任何 SQL 时创建预编译语句并缓存以加速后续调用,详情请参考 Session 文档
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
PrepareStmt: false,
})禁用嵌套事务
在数据库事务内使用 Transaction 方法时,GORM 会通过 SavePoint(savedPointName) 和 RollbackTo(savedPointName) 提供嵌套事务支持,可通过 DisableNestedTransaction 选项禁用此功能,详情请参考 Session 文档
允许全局更新
启用全局更新/删除操作,详情请参考 Session 文档
禁用自动连接检测
GORM 初始化后会自动 ping 数据库以检查可用性,设置为 true 可禁用此功能
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
DisableAutomaticPing: true,
})迁移时禁用外键约束
GORM 在执行 AutoMigrate 或 CreateTable 时会自动创建数据库外键约束,设置为 true 可禁用此行为,详情请参考 Migration 文档
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true,
})评论
登录后参与评论
正在加载评论…
InfoSphere