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:  "yuan@test.com",
	}
	tx.Create(&t)
	fmt.Println(t)

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值