使用gorm的初体验|青训营笔记

129 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。

前言

本次青训营刚组好队的第一次会议,大家都谈论自己对于这次项目的看法,例如要用什么数据库,如何建表,要不要使用Redis等细节时,有人提到了gorm,说用它很方便,这是我第一次认识gorm。随着课程的学习,大家也逐渐开始分工敲代码,本篇笔记就结合抖音项目评论部分的代码讲解一下gorm。

什么是gorm

前面几篇笔记讲客户端如何与服务器端获取,传输数据。我们知道数据是存放在数据库的,需要的时候通过进数据库进行查询来获取或是更新数据。以前系统性地学习过SQL,建表插数据还有不同条件下的SQL语句或多或少都有些繁琐,尤其对于服务器实时查询这样需要效率的场景来说更是如此。因此,orm(Object-Relationl Mapping)诞生了,它的作用是在关系型数据库(MySQL,PostgreSQL等)与对象之间建立映射,这样我们就可以通过写程序操作对象来达到原本各个复杂的SQL语句的目的了。而gorm就是用go语言编写的一个广受欢迎的orm库。上手gorm还是比较简单的,网上的文档也十分清晰,笔者在此就不赘述,下文主要讲一些笔者在写代码过程中的小分享。

软删除

评论部分有一个操作是删除一条评论,如果是SQL语句来实现,就是 DELETE FROM comments WHERE id = xxx 然后这条数据就会从数据库中消失,也即删掉了。但如果我们在建表的时候使用gorm.Model,就可以达到软删除的效果

type Comment struct { 
     gorm.Model      
     UserID uint64 `gorm:"index"`      
     VideoID uint64 `gorm:"index"`     
     Content string `gorm:"size:1024"` 
    }

因为gorm.Model中包含gorm.deletedat字段,当这样拥有软删除能力的模型调用Delete时,gorm会改变该字段为删除时时间,因而查询时是查不到这条数据的,但这条记录仍然还在数据库内,这也是它被称作软删除的意义。下图展示了如何根据comment id删除一条评论

截屏2022-06-14 下午3.59.16.png 可以清楚地看到,使用gorm摆脱了繁琐的SQL语句,采用了gorm库中的Delete。

参考文档:

learnku.com/docs/gorm/v…