Day06:GORM快速入门03 删除| 青训营

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Day06:GORM快速入门03 删除| 青训营

导读

本套笔记是学习完Gin框架之后的下一个阶段,通过Gin框架我们可以很方便的和前端进行交互,下一步就是和数据库进行交互,这就需要使用GORM。本套笔记就是带你快速上手GORM,学习完这个之后就可以完成大项目的开发了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。

本套课程基于GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.进行讲解,是对这个的补充解释说明。

注意

代码详解大部分是注释的形式给出,请留意代码注释。

GORM介绍

GORM(Go Object Relational Mapping)是一个在 Go 语言中使用的优秀的 ORM(对象关系映射)库。它提供了简单且强大的 API,使开发人员能够轻松地与数据库进行交互

删除一条记录

我们的数据库里面有这样的一个记录

image.png

要删除的话只需要书写

result := db.Where("name = ?", "jinzhu").Delete(&Email{})

完整代码

package main  
import (  
"fmt"  
"gorm.io/driver/mysql"  
"gorm.io/gorm"  
)  
type Email struct {  
ID uint  
Name string  
Email string  
} //Email的表  
func main() {  
db, _ := gorm.Open(mysql.New(mysql.Config{  
DSN: "root:Lycdemima1@@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local", // DSN data source name  
DefaultStringSize: 256, // string 类型字段的默认长度  
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持  
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引  
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列  
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置  
}), &gorm.Config{}) //连接数据库  
result := db.Where("name = ?", "jinzhu").Delete(&Email{})//删除记录  
fmt.Println(result)  
}

运行之后我们就会发现记录被删除了

根据主键删除

GORM 允许通过主键来删除对象,它可以使用数字

db.Delete(&User{}, 10)//删除id为10的记录
db.Delete(&User{}, "10")//删除id为10的记录
db.Delete(&users, []int{1,2,3})//删除id为1,2,3的记录

钩子函数

删除之前运行

func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
    if u.Role == "admin" {
        return errors.New("admin user not allowed to delete")
    }
    return
}

删除之后运行

func (u *User) AfterDelete(tx *gorm.DB) (err error) {
    if u.Role == "admin" {
        return errors.New("admin user not allowed to delete")
    }
    return
}

软删除

软删除是一种在数据库中标记记录为已删除而不是实际删除的技术

通常是一个名为 deleted 或类似的字段

如果你的模型包含了 gorm.DeletedAt字段(该字段也被包含在gorm.Model中),那么该模型将会自动获得软删除的能力。

type User struct {
  ID      int
  Deleted gorm.DeletedAt
  Name    string
}

当调用Delete时,GORM并不会从数据库中删除该记录,而是将该记录的DeleteAt设置为当前时间,而后的一般查询方法将无法查找到此条记录

查找被软删除的记录

可以使用Unscoped来查询到被软删除的记录

db.Unscoped().Where("age = 20").Find(&users) //找到这一条数据

永久删除

可以使用 Unscoped来永久删除匹配的记录

//"condition_column" 是用于指定删除条件的列名,"conditionValue" 是该列的值
db.Unscoped().Where("condition_column = ?", conditionValue).Delete(&Model{})
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
5129 0
|
前端开发 Go API
Day08:GORM快速入门07 has many| 青训营
Day08:GORM快速入门07 has many| 青训营
|
SQL BI
SQL利用Case When Then多条件判断
CASE     WHEN 条件1 THEN 结果1     WHEN 条件2 THEN 结果2     WHEN 条件3 THEN 结果3     WHEN 条件4 THEN 结果4 .........     WHEN 条件N THEN 结果N     ELSE 结果X END Case具有两种格式。
8114 0
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
存储 Java Go
Day01:Go语言基础语法速过 | 青训营
Day01:Go语言基础语法速过 | 青训营
|
前端开发 Go API
Day09:GORM快速入门09 关联模式| 青训营
Day09:GORM快速入门09 关联模式| 青训营
|
前端开发 Go API
Day08:GORM快速入门08 many to many| 青训营
Day08:GORM快速入门08 many to many| 青训营
|
存储 前端开发 Go
Day08:GORM快速入门06 HasOne| 青训营
Day08:GORM快速入门06 HasOne| 青训营
|
前端开发 关系型数据库 MySQL
Day06:GORM快速入门02 增加| 青训营
Day06:GORM快速入门02 增加| 青训营

热门文章

最新文章