• 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
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    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)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    iOS中UIColor,CGColor,CIColor详解
    vue3 解决警告: Promise returned from xxx is ignored 和 $router未定义
    python合并多个excel
    【图论】Floyd
    Splunk iowait 报警的解决
    真机测试——关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法
    k8s整合kong
    数据结构学习笔记(V):树与二叉树
    计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用
    前端小案例-图片存放在远端服务器
  • 原文地址:https://blog.csdn.net/qq_43058348/article/details/133740477