Go 3件套
介绍
基础使用
Gorm的基础使用
-
- 连接数据库,增删改查操作
Gorm支持的数据库
- Gorm目前支持MySQL、SQLServer、PostgreSQL、SQLite
-
- DSN(包含了一些数据库的信息)
- GORM通过驱动来连接是数据库,若需其他类型的数据库,可以复用/自行开发驱动。
Gorm创建数据
-
-
db.Create()是链式调用,使用后还会返回Gorm对象,所以可以用res接收Gorm对象后使用res.Error来获取err.
创建数据的时候,如果遇到唯一索引冲突,如何处理?
- 使用Upsert
- Gorm中提供了支持,用clause.OnConflict处理数据冲突
-
- 起了冲突,但是先以不处理冲突,只是把数据插进去
Gorm中要设置一些默认值,如何处理?
- 通过使用default标签为字段定义默认值
-
Gorm查询数据
First的使用踩坑
使用 First 时,需要注意查询不到数据会返回 ErrRecordNotFound. 使用 Find 查询多条数据,查询不到数据不会返回错误。
使用结构作为条件查询
当使用结构作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为 0、"、false 或其他 零值该字段不会被用于构建查询条件,使用Map 来构建查询条件
Gorm更新数据
-
- 使用 Struct 更新时,只会更新非零值,如果需要更新零值可以使用 Map 更新或使用Select 选择字段
Gorm删除数据
- 物理删除
-
- 软删除
-
- GORM 提供了 gorm.DeletedAt 用于帮助用户实现软删
- 拥有软删除能力的 Model 调用 Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间,
- 使用 Unscoped 可以查询到被软删的数据
Gorm事务
- Gorm 提供了 Begin、Commit、 Rollback 方法用于使用事务
-
- Gorm 提供了 Tansaction 方法用于自动提交事务,避免用户漏写 Commit、 Rollbcak.
-
GormHook
- GORM 在提供了 CURD 的 Hook 能力
- Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数 如果任何 Hook 返回错误,GORM 将停止后续的操作并回滚事务
Gorm性能提高
-
- 对于写操作(创建、更新、删除),为了确保数据的完整性
- GORM 会将它们封装在事务内运行但这会降低性能,可以使用 SkipDefaultTransaction 关闭默认事务
- 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度,本机测试提高大约 35 %左右
Gorm生态
- GORM 拥有非常丰富的扩展生态,以下列举一部分常用扩展
-