GORM快速入门| 青训营

96 阅读3分钟

在进行后端接口开发时,难免会接触数据库,但随着开发工具的迭代升级,如今已经出现了不需要写sql语句的ORM框架。本篇笔记就以GORM框架出发,记录从下载安装到成功跑第一个GORM程序的过程。

ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。使用ORM框架就能以面向对象的方式操作数据库,而不是再花时间去设计SQL语句,有效地提高了开发人员的开发效率,降低数据库与上层应用的耦合。

gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 详细信息请移步至GORM中文站

本文发布于2023-08-09,文中使用的gorm版本有极大概率与你正在使用的不一致,为了更好的使用gorm请移步官方中文文档GORM中文站

好,下面正文开始。

安装

如果没换源,请参考我上一篇文章:Gin框架快速入门| 青训营

之后就是下载并安装gorm,以mysql为例

go get -u github.com/jinzhu/gorm
go get gorm.io/driver/mysql

连接数据库

连接不同的数据库都需要导入对应数据的驱动程序,GORM已经贴心的为我们包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动即可:

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

末尾的mysql需要替换为你的数据库类型,GORM 官方支持的数据库类型有:MySQL, PostgreSQL, SQLite, SQL Server 和 TiDB,这里我以mysql为例,如不同请参考官方文档。

运行一段示例代码

代码如下

package main  
  
import (  
"gorm.io/driver/mysql"  
"gorm.io/gorm"  
)  
  
type Product struct {  
gorm.Model  
Code string  
Price uint  
}  
  
func main() {  
    // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 
    dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"  
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})  
    if err != nil {  
        panic("failed to connect database")  
    }  

    // 迁移 schema  
    db.AutoMigrate(&Product{})  

    // 创建新记录  
    db.Create(&Product{Code: "D42", Price: 100})
}

这段代码创建了一个products表,并且创建了一个记录。回头看看你的mysql数据库,发现多了一些表,但里面的字段多了几个,gorm.Model中的内容:GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,如果你没有懒得设计主键的话可以将它嵌入到你的结构体中,以包含这几个字段。gorm.Model的定义如下:

type Model struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
}

image.png 下面说明一下mysql连接需要用到的dsn变量。

它的主要格式为:username:password@protocol(address)/dbname?param=value

  • 其中username是你的数据库用户名,一般测试时用的是root
  • password就是用户名对应的密码
  • protocol是连接数据库用到的协议,一般为TCP
  • address就是你数据库的地址
  • /dbname就是你的数据库名称
  • ?后面就是跟的一些额外的参数,详细参考github.com/go-sql-driv…