golang gorm——hook和session配置

orm hook和session

gorm hook

gorm提供了一些hook函数,在增删查改、事务操作前后执行。需要让model实现对应接口。hook函数的执行会先于gorm sql运行日志的打印。

// gorm 插入更新都会默认开启事务,如果业务无需开启,在设置中可以关闭
// 事务开始之前
func (t *Teacher) BeforeSave(tx *gorm.DB) error {
	fmt.Println("hook BeforeSave")
	return nil
}

// 事务结束之后,提交和回滚
func (t *Teacher) AfterSave(tx *gorm.DB) error {
	fmt.Println("hook AfterSave")
	return nil
}

// 插入前
func (t *Teacher) BeforeCreate(tx *gorm.DB) error {
	fmt.Println("hook BeforeCreate")
	return nil
}
// 插入后
func (t *Teacher) AfterCreate(tx *gorm.DB) error {
	fmt.Println("hook AfterCreate")
	return nil
}
// 更新前
func (t *Teacher) BeforeUpdate(tx *gorm.DB) error {
	fmt.Println("hook BeforeUpdate")
	return nil
}
// 更新后
func (t *Teacher) AfterUpdate(tx *gorm.DB) error {
	fmt.Println("hook AfterUpdate")
	return nil
}
// 删除前
func (t *Teacher) BeforeDelete(tx *gorm.DB) error {
	fmt.Println("hook BeforeDelete")
	return nil
}
// 删除后
func (t *Teacher) AfterDelete(tx *gorm.DB) error {
	fmt.Println("hook AfterDelete")
	return nil
}
// 查询后
func (t *Teacher) AfterFind(tx *gorm.DB) error {
	fmt.Println("hook AfterFind")
	return nil
}

gorm session

gorm可以建立多个会话,每个会话配置互相独立,可以不同于全局的配置。在会话中可以进行特殊的配置达到业务/性能要求。

// 创建会话, 可以单独做一些配置(可以不同于全局配置)
func Session() {
	tx := DB.Session(&gorm.Session{
		//开启预编译
		PrepareStmt: true,
		//跳过钩子函数
		SkipHooks: true,
		//禁用嵌套事务
		DisableNestedTransaction: true,
		//允许全局更新
		AllowGlobalUpdate: true,
		// 设置日志级别
		Logger: DB.Logger.LogMode(logger.Error),
	})

	t := Teacher{
		Name:   "yuan",
		Age:    41,
		Salary: 122345.123,
		Email:  "[email protected]",
	}
	tx.Create(&t)
	fmt.Println(t)

}

你可能感兴趣的:(golang,数据库,服务器)