Go框架三件套(Gorm笔记) | 青训营笔记

102 阅读3分钟

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 作为主键
  • 结构体名的 蛇形复数 作为表名
  • 字段名的 蛇形 作为列名
  • CreatedAtUpdatedAt 字段追踪创建、更新时间

GORM 定义一个 gorm.Model 结构体,其包括字段 IDCreatedAtUpdatedAtDeletedAt,其他结构体直接匿名嵌套即可。

gorm入门

官方文档:gorm.io/

四、引用参考:

该文章部分内容来自于以下课程或网页:

字节内部课:Go 框架三件套详解(Web/RPC/ORM)

go语言ORM框架

官方文档

# Golang下的ORM框架gorm的介绍和使用