目录
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包里的一个结构体
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(创建时间)字段
5.DryRun(测试SQL)字段
6.PrepareStmt(预编译)字段
7.DisableAutomaticPing(ping数据库)字段
8.常用模板
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
SkipDefaultTransaction: false, //不过在开发中我们常常配为false,即仍然遵循系统默认事务
DisableForeignKeyConstraintWhenMigrating: true, //在开发中我们常常配为true ,即取消外键约束
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名
},
})