Goweb---Gorm操作数据库(二)

Gorm允许用户自己自定义钩子操作,使用这些钩子操作,可以在增删改查操作前进行相关的操作和检验,它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。

自定义钩子函数
go 复制代码
package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	ID       int    `gorm:"column:id"`
	Name     string `gorm:"column:name"`
	Age      int    `gorm:"column:age"`
	Birthday string `gorm:"column:birthday"`
}

func (u *User) BeforeCreate(tx *gorm.DB) error {
	
	fmt.Println("BeforeCreate user : ", u.Name)
	return nil
}
func main() {

	dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("连接数据库失败:", err)
	}

	db.AutoMigrate(&User{})

	user := User{
		Name:     "张三",
		Age:      20,
		Birthday: "2000-01-01",
	}
	db.Create(&user)
}

func (u *User) BeforeCreate(tx *gorm.DB) error {

fmt.Println("BeforeCreate user : ", u.Name)

return nil

}

这是自定义的钩子函数,在用户执行db.Create(&user)前会执行BeforeCreate函数

其他相关操作都可以类推或者看相关文档

下面是Gorm的官方文档:
https://gorm.io/zh_CN/docs/create.html

跳过钩子函数:

可以通过使用SkipHooks会话模式跳过钩子函数

具体操作:

将db.Create(&user) 改为 db.Session(&gorm.Session{SkipHooks: true}).Create(&user)

在操作前将不会调用钩子函数。

相关推荐
GDAL1 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT2 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
程序员岳焱3 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
喜欢敲代码的程序员4 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:项目搭建(一)
spring boot·mysql·elementui·vue·mybatis
AI、少年郎4 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄4 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
钢铁男儿4 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#
叁沐5 小时前
MySQL 02 日志系统:一条SQL更新语句是如何执行的?
mysql
DataGear5 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_438335405 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式