这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
1. 本堂课重点内容
介绍了Gorm、Kitex、Hertz及其基本用法和常见的API。最后介绍了一个实战项目。
2. 详细知识点介绍
-
Gorm是一个已经迭代了10+年的功能强大的持久层框架,目前支持Mysql,SqlServer,PostgreSQL,SQLite等数据库。Gorm通过驱动来连接数据库,如果需要连接其他数据库则,可以自行服用和开发驱动。
-
Gorm基本的CRUD的API我这里就不做过多介绍了。我们来介绍一下我个人觉得比较重要的点。
2.1 使用结构体作为条件进行查询的时候,Gorm指挥查询非0值的字段,这意味着如果某个字段的值为0或false或者其他零值,那么该字段将不会被用来构建查询条件。这种情况下可以使用Map来构建查询条件。
2.2 使用结构体进行更新的时候,指挥更新非0值,如果需要进行0值的更新, 可以使用Map更新或者用select来选择字段。
2.3 Gorm提供了gorm.DeleteAt来帮助用户实现逻辑删除。拥有逻辑删除的Model调用Delete的时候,记录不会被从数据库真正删除,但Gorm会将delateAt置为当前时间,并且你不能通过正常的查询方法找到该记录。使用Unscoped可以查询到被逻辑删除的数据
2.4 Gorm同时也支持事务操作,可以使用Begin、Commit、Rollback等方法来实现事务。同时,Gorm也提供了Transaction方法用于自动提交事务,避免用户漏写Commit、Rollback。
2.5 Gorm同时也提供了CURD的HOOK能力,可以在进行创建、查询、更新、删除等操作之前或者之后调用的函数,如果任何HOOK返回错误,Gorm将停止后续的操作。
2.6 对于写操作(创建、更新、删除),为了确保数据的完整性,Gorm会将它们封装在事务内运行,但这会降低性能,如果不需要的话可以使用SkiDefaultTrascation:false进行关闭。另外,使用PrepareStmt缓存预编译可以提高和后续的速度。(第一次编写与1.20晚,先挖个坑)
更多的关于Gorm的用户可以查看Gorm的文档: Gorm文档介绍