Gorm之gorm.Config结构体字段解析

Gorm之gorm.Config结构体字段详解

1.SkipDefaultTransaction(事务)字段

1.1系统默认事务

系统的默认事务:我们的gorm连接到数据库后,我们所做的增删改查操作,只要是这种链式的,gorm会自动的帮我们以事务的方式给串联起来,保证数据的一致性

1.2跳过默认事务

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local", 
		DefaultStringSize: 171,                                                             
	}), &gorm.Config{
		SkipDefaultTransaction: true,  //配置成为true即可取消系统默认事务
	})
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(conn, err)
}

2.NamingStrategy(表名)字段

2.1系统默认表名

系统默认为表明加s;
表名是结构体名称的复数形式 ,会自动在后面加一个s,且会把表明的英文大写改成小写s

type User struct {} // 默认的表名是 users ,会自动把大写改成小写

2.2取消默认表名

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)
//模型结构
type love struct {
	Id   int
	Name string
	Age  int
}

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // love表将是love,不再是loves,即可成功取消表明被加s
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&love{})
}
//NamingStrategy的字段类型是:schema.Namer,Namer是gorm的子包schema里的一个接口
//schema.NamingStrategy是gorm/schema包里的一个结构体

image-20220210110237245

2.3表名加前缀

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)

//模型结构
type love struct {
	Id   int
	Name string
	Age  int
}

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "t_", // 表名前缀,`love`表为`t_love`
			SingularTable: true, // 使用单数表名,启用该选项后,`love` 表将是`love`
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&love{})
}

注:假如数据库里的t_use表存在,假如现在把代码里的前缀改成了"m_" ,进行再次运行后,数据库里会同时存在t_user表与m_user表,以后操作的都是m_user , 可以把t_user删了

2.4自定义表名

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type People struct {
	Name string
	Age  int64
}


func (People) TableName() string {
	return "llh" //在这里写想要设置的表名
}
func main() {
	dsn := "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local"
	conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&People{})

}

3.DisableForeignKeyConstraintWhenMigrating(外键约束)字段

3.1默认外键约束

在使用AutoMigrate或Migrator接口的CreateTable方法创建表时,GORM 会自动创建外键约束,即会自动创建一个物理外键,使查询很缓慢;
若要禁用该特性,可将其设置为 true,即逻辑外键,即需要自己手动去设置外键,建议改为true,会让数据库的处理速度快很多
注:AutoMigrate是自动迁移的意思

3.2取消外键约束

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableForeignKeyConstraintWhenMigrating: true,
})

4.NowFunc(创建时间)字段

image-20220210122611865

5.DryRun(测试SQL)字段

image-20220210122644181

6.PrepareStmt(预编译)字段

image-20220210122739848

7.DisableAutomaticPing(ping数据库)字段

image-20220210122936730

8.常用模板

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: false,  //不过在开发中我们常常配为false,即仍然遵循系统默认事务
    DisableForeignKeyConstraintWhenMigrating: true,  //在开发中我们常常配为true ,即取消外键约束
     NamingStrategy: schema.NamingStrategy{
    SingularTable: true, // 使用单数表名
  },
})
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值