这是我参与「第三届青训营 -后端场」笔记创作活动的第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删除一条评论
可以清楚地看到,使用gorm摆脱了繁琐的SQL语句,采用了gorm库中的Delete。
参考文档: