记录一下在课程中学习到的GORM框架及其应用,希望给大家带来一些帮助
一、GORM
GORM 是一个 Golang 的 ORM(Object Relational Mapping)库,它提供了简单而强大的 API,用于在 Go 应用程序中与数据库进行交互。通过 GORM,我们可以轻松地操作数据库中的数据,无需编写复杂的 SQL 语句。GORM 支持 MySQL、PostgreSQL、SQLite、SQL Server 等主流数据库。
GORM 提供了一些常用的功能,包括:
- 数据库模型的映射和迁移
- CRUD(创建、读取、更新、删除)操作
- 查询构造、条件查询、事务支持
- 关联关系(例如一对一、一对多、多对多等)
- 钩子(Hooks)、回调和自定义 SQL
二、GORM 的基础使用
1. 初始化数据库连接
在安装gorm后,便可初始化数据库连接,其中DSN(Data Source Name)是一个用于配置数据库连接的字符串,它包含了连接数据库所需的所有信息,如数据库类型、地址、端口、数据库名、用户名、密码以及连接选项等。
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" // DSN字符串
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("failed to connect database: %v", err)
}
}
2. gorm.Open()
是 GORM ORM 框架中用于创建和初始化数据库连接的函数。这个函数是使用 GORM 时与数据库交互的起点
func Open(dialector Dialector, config *Config) (*DB, error)
参数说明
dialector Dialector: 这个参数是一个实现了Dialector接口的实例,它用于配置数据库连接的详细信息,比如数据库类型、DSN(Data Source Name)等。GORM 为不同的数据库提供了不同的Dialector实现,例如mysql.Open(),postgres.Open(),sqlite.Open()等。config *Config: 这个参数是一个指向Config结构体的指针,它允许你自定义 GORM 的行为,包括但不限于日志配置、命名策略、钩子函数等。
返回值
*DB: 如果数据库连接成功,gorm.Open()函数会返回一个*gorm.DB实例,这是 GORM 中用于执行数据库操作的主要类型。error: 如果在尝试打开数据库连接时发生错误,函数会返回一个错误。
3. DB.AutoMigrate()
是 GORM 框架中的一个功能,用于自动迁移数据库模式。这意味着它会根据你定义的 Go 结构体(structs)自动创建或修改数据库表结构。
AutoMigrate 有以下特点:
- 自动创建表:如果表不存在,
AutoMigrate会根据结构体创建表。 - 自动更新表:如果表已存在,
AutoMigrate会根据结构体的变化更新表结构,比如添加或删除列。 - 模型关联:
AutoMigrate也会处理模型之间的关联,比如一对一、一对多或多对多关系。 - 可选参数:
AutoMigrate允许传递一些参数来定制迁移过程,例如指定只创建表或只更新表。
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移模式
db.AutoMigrate(&mystruct{})
}
注意!!! 对于已经存在的表和数据,使用Automigrate时它会根据结构体的变化尝试自动更新数据库表,但是它只会添加新字段、修改字段类型(如果不影响现有数据) ,不会删除字段或者做复杂的结构调整。这样避免了数据丢失的风险。
4. 定义模型
在 GORM 中,我们需要为数据库表创建对应的结构体。GORM 会将结构体的字段映射为数据库表的列。以下是一个简单的模型定义:
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:255;not null"`
Email string `gorm:"uniqueIndex;size:100"`
Age int
Password string
}
在该模型中:
ID是主键。Name字段是一个非空的字符串。Email字段是一个唯一索引,限制了最大长度为 100 个字符。Age是整数类型。Password是用户密码。
5. CRUD 操作
(1)创建记录
使用 Create 方法可以插入一条记录:
user := User{Name: "Alice", Email: "alice@example.com", Age: 25, Password: "password123"}
db.Create(&user)
(2)查询记录
使用 First、Find、Where 等方法进行查询:
var user User
db.First(&user, 1) // 通过主键查询
db.Where("name = ?", "Alice").First(&user) // 条件查询
(3)更新记录
使用 Save、Update、Updates 等方法更新记录:
db.Model(&user).Update("Age", 26)
db.Model(&user).Updates(User{Name: "Alice Smith", Age: 27})
(4)删除记录
使用 Delete 方法删除记录:
db.Delete(&user, 1) // 通过主键删除
学习心得
目前感觉GORM框架和之前所用到的Django中的ORM框架非常类似,但GORM语法更加简洁,常见的 CRUD 操作、查询和关联关系管理都更加的直观,使用GORM框架可以大大提升开发效率。