对Gorm框架的认识 | 青训营
Gorm框架的认识
- 个人认为Gorm框架是一个功能较为齐全的ORM框架,它能够结合Go语言的简洁语法,实现对数据库的增删改查操作
- 个人在使用过程中遇到了一些较为痛苦的问题,但是这些问题确实是在教我们如何使用Gorm框架过程中提到过的
遇到的一些问题(希望可以给后来人一些启发与提示)
- Gorm框架在开发者自己使用的过程中,如果开发者没有明确的设定数据库的表名的话,那么Gorm框架将会默认使用结构体的蛇形复数(也就是结构体名称小写之后,变为复数的形式)
- 使用Gorm框架的First方法时要注意查询不到数据时,会返回ErrRecordNotFound
- 使用Find查询数据时,查询不到数据时不会返回错误
- 使用Find()方法时,当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为0、""、 false或其他零值,该字段不会被用于构建查询条件,建议使用Map来构建查询条件
- 使用Update方法时,使用 Struct 更新时,只会更新非零值,如果需要更新零值可以使用 Map更新或使用Select 选择字段。
- 使用Delete方法时,拥有软删除能力的 Model调用Delete时,记录不会被从数据库中真正删除。但 GORM会将 DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。
- 使用Delete方法时,使用Unscoped可以查询到被软删的数据
对于事务功能
- Gorm框架默认会加上事务进行增删改查
- Hook是在原生事务的基础上进行的加强
- Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。
- 如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。