Gorm笔记(2) | 青训营笔记

156 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

创建连接的参数

db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:password@tcp(123.249.111.000:3306)/gorm_class?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		SkipDefaultTransaction: false,
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "gov_", // 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 enable
		},
		DisableForeignKeyConstraintWhenMigrating: true,//逻辑外键
	})

gorm的标签

primaryKey 将列定义为主键

unique 列非空

default 列空时设置为默认值

embedded 设置为嵌套字段

index 设置索引

column 指定列名

embeddedPrefix 设置嵌套字段的前缀 目前只用到了这些,以后有用到其他的再进行学习

has one

结构体的定义

type GrilGod struct {
	gorm.Model
	Name string
	Dog  Dog
}
type Dog struct {
	gorm.Model
	Name      string
	GrilGodID uint
	//GrilGod   GrilGod
}

创建has one 关系的结构体

创建操作

    if M.HasTable(&Dog{}) == false {
		M.CreateTable(&Dog{})
	}
	if M.HasTable(&GrilGod{}) == false {
		M.CreateTable(&GrilGod{})
	}
	tg := Dog{
		Model: gorm.Model{ID: 1},
		Name: "123",
	}
	ns := GrilGod{
		Model: gorm.Model{ID: 1},
		Dog: tg,
	}
	db.Create(&ns)

如果这样进行创建,gorm会自动帮助我们对tg这个数据进行创建,并将Gril God的ID赋值为相应的Gril God的ID

预加载的使用

   ns := GrilGod{
		Model: gorm.Model{ID: 1},
		//Dog:   tg,
	}
	//db.Create(&ns)
	db.Preload("Dog").Find(&ns)

在使用查询的时候我们要注意预加载,如果不进行预加载,那我们没办法将对应的Dog和GrilGod一起提出来,而是空值

Belongs To

结构体定义

type GrilGod struct {
	gorm.Model
	Name string
	//Dog  Dog
}
type Dog struct {
	gorm.Model
	Name      string
	GrilGodID uint
	GrilGod   GrilGod
}

创建操作

       if M.HasTable(&Dog{}) == false {
		M.CreateTable(&Dog{})
	}
	if M.HasTable(&GrilGod{}) == false {
		M.CreateTable(&GrilGod{})
	}
	ns := GrilGod{
		Model: gorm.Model{ID: 1},
		Name: "ss",
		//Dog:   tg,
	}
	tg := Dog{
		Model:   gorm.Model{ID: 1},
		Name:    "123",
		GrilGod: ns,
	}
        db.Create(&tg)

当我们对tg进行创建操作的时候也会对相应的ns进行创建

对关系的操作

db.Model(&tg).Association("GrilGod").Append(&ns)
db.Model(&tg).Association("GrilGod").Clear()
db.Model(&tg).Association("GrilGod").Delete(&ns)
db.Model(&tg).Association("GrilGod").Replace(&ns,&ns1)

对关系进行清除,修改,增加等操作

gorm.Model的使用

在使用gorm.Model的时候,一定要小心,不是硬删除,而是软删除,我们可以使用Unscoped()来查询软删除的数据,或者对数据进行硬删除