Go的ORM框架|青训营笔记

83 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第5天

一、本堂课重点内容:

  • 了解了ORM框架的使用
  • 能使用ORM框架对数据库进行CRUD操作

二、详细知识点介绍:

1.orm框架是什么:

ORM指的是Object Realtional Mapping,译为关系对象映射,是一种为了解决面向对象和关系数据库存在的互不匹配的现象计数,ORM框架是连接数据库的桥梁。在平时开发时,需要频繁地对数据库的数据进行访问,如果我们每次都写原生SQL语句来进行数据的访问,不太灵活缺乏弹性,ORM框架将一张表与一个结构体或一个类对应起来,并提供了统一的接口用于对数据库进行操作。而Gorm是一个已经迭代了10年的功能强大的Go框架

2.使用Gorm对数据库进行连接操作:

先从学习如何连接数据库开始,利用gorm.Open函数来连接数据库,这个函数返回两个参数,一个是error,访问数据库失败时报的错误,另一个是db会话,类似于连接,通过使用该链接对数据库里的数据进行操作。这个函数里通过使用mysql.Open("user:password@tcp(IP:port)/db_name?charset=utf8mb4&loc=Local&parseTime=true")来进行数据库的连接,此外还可以通过在里面设置&gorm.config{}来增加额外配置。Gorm允许用户实现相应的接口来实现对新的数据库的驱动。

3.使用Gorm对数据库进行增删改查:

C(Create):创建数据,在Gorm中利用db.Create()函数来进行数据创建,这个函数会返回一个结果res,可以通过res.Error来打印这个在执行创建数据的过程中是否出错。这个函数接收一个interface{}类型的变量。前面我们说过,ORM框架将一张表与一个结构体相对应,所以在这里的interface类型,应填入一个与表中的列名相对应的结构体类型的指针。在结构体中可以使用gorm:"col_name"来指定列名,除此之外,还可以使用gorm:"default:col_name"来指定默认值。
R(Read):查询数据,利用db.Find或db.First来查询,First函数较为特殊,会去查询满足条件的行按主键排序后的顺序中的第一个来进行返回。而Find函数通常和where函数联合使用,用于查找特定条件下的行。除此之外,where语句还支持以对应表的结构体变量来进行擦汗寻,此时如果直接使用结构体变量来进行查询会忽略0值得条件,也就是说对应属性为0值得话,该条件将不会加入到SQL语句的构建当中,此时也可以使用map[string]interface{}来构建查询条件
U(Update):更新数据,利用db.Update或db.Updates来更新数据,这两个函数接收一个结构体参数或者一个映射参数,结构体参数只能用来更新非0值,如果需要更新0值,可以传入map[string]interface{}来进行更新,Gorm默认关闭了全局更新,所以我们通常利用db.where来进行条件的筛选。除此之外,还要告诉数据库从哪个表中进行筛选,可以使用db.Model()函数,这个函数接收一个结构体参数,并会使用该结构体参数的蛇形复数(如果结构体名为CityInfo,蛇形复数为city_infos)。如果Model中的结构体变量有默认值且没有使用where来增加条件,那就会使用一个策略,会直接利用结构体中变量的默认值,对所有符合默认值的行进行修改。
D(Delete):删除数据,可以使用db.Delete来进行强制从数据库中删除数据,但实际上,一般不会强制从数据库中删除数据,而是使用软删除db.DeletedAt来进行软删除,被删除的数据不会从数据库中删去,只是被设置为不可访问,但是可以利用db.Unscoped来进行对软删除的数据进行访问。

三、实践练习例子:

利用了Gorm自己练习了对数据库进行基本的增删查改和连接数据库

四、课后个人总结:

  • 在本章的学习中,学习了Gorm框架如何进行增删查改,对数据库进行常规操作。

  • 对于RPC框架以及RPC的概念都比较模糊,不是很理解。