Gorm的安装及使用(一) | 青训营笔记

84 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

Gorm是什么

Gorm是一个已经迭代了10年+的功能强大的ORM(对象关系映射)框架,它在字节内部被广泛使用并且拥有非常丰富的开源扩展。

Gorm的安装

go get -u gorm.io/gorm

如果我们使用的是MySQL数据库,则可以使用以下命令安装相应的数据库驱动: go get -u gorm.io/driver/mysql

类似地,假如我们需要使用其他类型数据库:

SQLite

go get -u gorm.io/gorm 
go get -u gorm.io/driver/sqlite 

SQL Server

go get -u gorm.io/gorm 
go get -u gorm.io/driver/sqlserver

PostgreSQL

go get -u gorm.io/gorm 
go get -u gorm.io/driver/postgres

连接数据库(以MySQL为例)

package main

import {
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
}

type Product struct {
    gorm.Model
    Id     uint
    Code   string
    Price  uint
}

func main(){
    dsn := "root:yc123456@tcp(127.0.0.1:3306)/test_01?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("failed to connect database!")
    }
    
    db.AutoMigrate(&Product{})
    
    p := Product{Code: "L1213", Price: 1200}
    
    //增
    tx := db.Create(&p)
    if tx != nil {
        println("保存成功!")
    }
}

数据添加成功,如图所示:

image.png

gorm声明模型gorm.Model

模型定义

模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成。 例如:

type User struct { 
ID uint 
Name string 
Email *string
Age uint
8 Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time }

约定

GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
遵循 GORM 已有的约定,可以减少配置和代码量。如果约定不符合自己的需求,也可以自定义。

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"` }

可以将它嵌入到自定义的结构体中,以包含这几个字段。

嵌入结构体

对于匿名字段,GORM 会将其字段包含在父结构体中,例如:

image.png

文章参考自网站:GORM 创建_w3cschool