这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天,今天的课程是介绍Go框架三件套以及其使用方法。
一、Gorm
简介:
Gorm是一个已经迭代了10多年的ORM框架,拥有丰富的开源拓展并在字节内部广泛使用。
基本使用
定义gorm model:
type Product struct{
Dode string
Price uint
}
为model定义表名:
func (p Product) TableName() string{
return "product"
}
定义完成之后可以使用gorm的函数gorm.Open()进行数据库的连接,具体连接哪个数据库可以自己定义,比如想要使用mysql的数据库:mysql.Open(dsn)里面写上具体的数据库配置即可。dsn为data-source-name的缩写,表示数据源名称。
GORM目前支持MySql、SQLServer、PostgreSQL、SQLite.
想要查询数据可以调用First函数,使用First时,需要注意查询不到数据会返回ErrRecordNotFound,并且每次返回第一条数据,按照主键排序。
使用Find查询多条数据,查询不到数据不会返回错误,而是空值。
查询时不仅可以使用字符串,也可以使用结构体作为查询条件,GROM只会查询结构体中非零值的字段,要想查询零值,可以使用Map来作为查询条件。同样的,使用结构体进行更新时,也只会更新非零字段。
GORM中不同的删除操作是物理删除,GORM提供了gorm.DeletedAt用来实现软删,需要在结构体中增加Deleted字段,此时再进行删除就是软删。实现软删的方式为将Deleted置为当前时间,并且在查询时过滤掉有时间的数据,使用Unscoped可以查询到被软删的数据。
GORM也提供了Begin、Commit、Rollback方法用于使用事务,在需要使用事务的地方,开启事务:tx:=db.Begin(),开启完成之后使用tx对数据库进行操作,当sql执行失败时,调用Rollbacl进行回滚,所有都执行完成后使用Commit进行提交,GORM还提供了Tansaction方法用于自动提交事务。