Go框架三件套(Gorm笔记) | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第5天
一、Gorm介绍
gorm 是一个使用Go语言 编写的ORM 框架。文档齐全,对开发者友好,支持主流数据库,如MySQL,PostgreSQL, SQlite, SQL Server。
二、什么是ORM
2.1 ORM简介
ORM 是通过实例对象的语法 ,完成关系型数据库的操作,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用 ORM 框架可以让我们更方便的操作数据库。
ORM的主要作用是在编程中,把面向对象 的概念跟数据库中表 的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
一句话总结什么是ORM: 提供更加方便快捷的curd方法去和数据库产生交互。
2.2 优点:
- 提高了开发效率。
- 屏蔽sql细节。可以自动对实体Entity对象与数据库中的Table进行字段与属性的映射;不用直接SQL编码
- 屏蔽各种数据库之间的差异
2.3 缺点:
- orm会牺牲程序的执行效率和会固定思维模式
- 太过依赖orm会导致sql理解不够
- 对于固定的orm依赖过重,导致切换到其他的orm代价高
三、GORM功能概览
- 全功能ORM(无限接近)
- 关联(Has One, Has Many, Belongs To, Many To Many, 多态)
- 钩子函数Hook(在创建/保存/更新/删除/查找之前或之后)
- 预加载
- 事务
- 复合主键
- SQL 生成器
- 数据库自动迁移
- 自定义日志
- 可扩展性, 可基于 GORM 回调编写插件
- 所有功能都被测试覆盖
- 开发者友好
四、GORM快速入门
4.1 安装
# 由于在项目中使用mysql比较多,这里使用mysql进行数据存储
$ go get -u github.com/jinzhu/gorm
$ go get -u github.com/go-sql-driver/mysql
4.2 数据库连接
连接直接调用 gorm.Open 传入数据库地址即可。gorm支持基本上所有主流的关系数据库,只是连接方式上略有不同,这里以MySQL为例。
db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/ApiDB?charset=utf8") //第一个参数数驱动名
if err != nil {
panic(err.Error())
}
4.3 声明模型
模型其实就是标准的结构体(struct),其属性和表结构的字段按照GORM约定 一一对应。约定如下:
- ID 作为主键
- 结构体名的 蛇形复数 作为表名
- 字段名的 蛇形 作为列名
- CreatedAt、UpdatedAt 字段追踪创建、更新时间
GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,其他结构体直接匿名嵌套即可。
gorm入门
官方文档:gorm.io/
四、引用参考:
该文章部分内容来自于以下课程或网页:
字节内部课:Go 框架三件套详解(Web/RPC/ORM)