栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go的GORM的链式操作、错误处理、钩子、事务

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go的GORM的链式操作、错误处理、钩子、事务

1.链式操作

当使用链式写法时候,后面的方法将复用前面的方法的搜索条件(不包含内联条件)

db.Where("username LIKE ?", "%大旺%").Find(&users, "id IN (?)", []int{1, 2, 3}).Count(&count)
生成的数据库语句
SELECt * FROM t_user WHERe username LIKE '%大旺%' AND id IN (1, 2, 3)
SELECt count(*) FROM t_user WHERe username LIKE 'jinzhu%'


2.错误处理

gorm中的Error可以错误处理

	var user User
	if err := db.Table("t_user").Where("id = ?", 8).First(&user).Error; err != nil {
		fmt.Println(err)
	}


3.钩子

钩子是一个在 插入/查询/更新/删除 之前或之后被调用的方法。
    几种钩子

//新增的钩子
BeforeSave
BeforeCreate
AfterCreate
AfterSave
BeforeSave

//更新的钩子
BeforeUpdate
AfterUpdate
AfterSave

//查询的钩子
AfterFind

 //删除的钩子
BeforeDelete
AfterDelete

     查询钩子示例

func (u *User) AfterFind() (err error) {
   if u.Username == "大旺" {
   	println("我是查询钩子,在查询后执行")
   }
   return
}


4.事物

GORM 默认在事务中执行单个 create, update, delete 操作,以确保数据库数据完整性。也可以使用GORM的事物(Transaction )将多个 create、 update、delete 当成一个原子性操作。

// 开启事务
tx := db.Begin()
// 在事务中执行一些数据库操作 
tx.Create(...)
// 发生错误回滚事务
tx.Rollback()
// 或者提交这个事务
tx.Commit()

     将表长度改小

     更新表

	// 注意在事务中要使用 tx 作为数据库句柄
   tx := db.Begin()
   println("begin")
   defer func() {
   	if r := recover(); r != nil {
   		println("回滚")
   		tx.Rollback()
   	}
   }()

   if tx.Error != nil {
   	fmt.Println("事物开启异常")
   }
   if err := tx.Table("t_user").Where("id = ?", 8).Update(map[string]interface{}{"username": "大旺"}).Error; err != nil {
   	println("更新1回滚")
   	fmt.Println(err)
   	tx.Rollback()
   }

   if err := tx.Table("t_user").Where("id = ?", 8).Update(map[string]interface{}{"username": "大旺你好"}).Error; err != nil {
   	println("更新2回滚")
   	fmt.Println(err)
   	tx.Rollback()
   }

   tx.Commit()
   println("事务提交")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903470.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号