教程 > gorm 教程 > 阅读:110

gorm 配置——迹忆客-ag捕鱼王app官网

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_",   // table name prefix, table for `user` would be `t_users`
    singulartable: true, // use singular table name, table for `user` would be `user` with this option enabled
    nolowercase: true, // skip the snake_casing of names
    namereplacer: strings.newreplacer("cid", "cid"), // use name replacer to change struct/field name before convert it to db name
  },
})

logger

允许通过覆盖此选项更改 gorm 的默认 logger,参考 logger 获取详情


nowfunc

更改创建时间使用的函数

db, err := gorm.open(sqlite.open("gorm.db"), &gorm.config{
  nowfunc: func() time.time {
    return time.now().local()
  },
})

dryrun

生成 sql 但不执行,可以用于准备或测试生成的 sql,参考 会话 获取详情

db, err := gorm.open(sqlite.open("gorm.db"), &gorm.config{
  dryrun: false,
})

preparestmt

preparedstmt 在执行任何 sql 时都会创建一个 prepared statement 并将其缓存,以提高后续的效率,参考 会话 获取详情

db, err := gorm.open(sqlite.open("gorm.db"), &gorm.config{
  preparestmt: false,
})

禁用嵌套事务

在一个事务中使用 transaction 方法,gorm 会使用 savepoint(savedpointname)rollbackto(savedpointname) 为你提供嵌套事务支持,你可以通过 disablenestedtransaction 选项关闭它,查看 session 获取详情


allowglobalupdate

启用全局 update/delete,查看 会话 获取详情


disableautomaticping

在完成初始化后,gorm 会自动 ping 数据库以检查数据库的可用性,若要禁用该特性,可将其设置为 true

db, err := gorm.open(sqlite.open("gorm.db"), &gorm.config{
  disableautomaticping: true,
})

disableforeignkeyconstraintwhenmigrating

automigratecreatetable 时,gorm 会自动创建外键约束,若要禁用该特性,可将其设置为 true,参考 迁移 获取详情。

db, err := gorm.open(sqlite.open("gorm.db"), &gorm.config{
  disableforeignkeyconstraintwhenmigrating: true,
})

查看笔记

扫码一下
查看教程更方便
网站地图