GORM | 青训营笔记

23 阅读1分钟

GORM基础使用

“设计简洁、功能强大、自由扩展的全功能ORM”

基本用法

首先老师贴出了这样一个代码:

有些同学可能不清楚这个代码有什么用?如何将数据打印出来?在此做如下解释:

首先,需要你的数据库中有一个名为“users”的数据表(id,name,age),然后在代码中创建如下的结构体:

!定义时,属性首字母一定要大写!

否则在使用GORM进行数据库操作时会出现"Unsupported Scan, storing driver.Value type []uint8 into type *"错误。因此,应该将User结构体的字段名改为大写字母开头。

type User struct{
    ID int
    Name string
    Age int
}

添加代码db.Find(&users),它有什么用法呢?

在GORM中,db.Find(&result)用于通过给定的参数查询数据库,并通过result接收查询结果。其中,&result表示将查询结果通过引用方式传递给result变量。

同理,通过db.Find(&users)拿到数据,下一步就是打印

for _, user := range users {
    fmt.Printf("ID=%d, Name=%s,Age=%d\n", user.ID, user.Name, user.Age)
}

Model定义

image.png

image.png

GORM设计原理

image.png

SQL生成

image.png

参考了SQL语句的过程,采取了一个仿生的设计,不同的子句通过ChainMethod来实现,主要的方法通过FinishMethod来实现,主要体现了顺序上的一个差异。

GORM最佳实践

数据序列化&SQL表达式

不同数据库之间的统一性不是很好,GORM提供了统一的SQL表达式的支持SQL表达式查询,讲到了三种方法。 1.gorm.Expr 2.Struct定义GormValuer 3.自定义查询SQL实现接口,clause.Expression