GORM (Go ORM) 是一款使用 Go 语言编写的全功能 ORM 框架,它提供了非常强大的数据库操作能力,并且支持多种常见的数据库,例如 MySQL、PostgreSQL、SQLite、SQL Server 等。
下面来介绍一些 GORM 的基本特性和用法。
- 数据库连接
通过调用 gorm.Open 方法来连接数据库,例如:
Copy code
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
dsn := "root:password@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
这里使用了 MySQL 数据库作为示例,dsn 字符串里面的地址、端口、用户名、密码等参数需要根据实际情况修改。
- 定义模型
在 GORM 中,开发者需要定义模型来描述数据库表的结构。可以通过结构体的字段名来与数据库表的列名进行映射,并使用 GORM 的标签来设置列的一些属性。
例如:
Copy code
type User struct {
gorm.Model
Name string `gorm:"type:varchar(20);not null"`
Age int `gorm:"not null"`
}
这里通过定义 User 结构体,使用 gorm.Model 来帮助自动生成 ID、创建时间、更新时间和删除时间字段。同时,使用 gorm:"type:varchar(20);not null" 来设置 Name 列的数据类型为 varchar(20),并且该列不能为空。
- 数据库操作
GORM 提供了大量的数据库操作方法,例如创建、查询、更新、删除等。通过调用 db.Create、db.Find、db.Update、db.Delete 等方法来实现。
例如:
Copy code
// 创建记录
user := User{Name: "foo", Age: 18}
db.Create(&user)
// 查询所有记录
var users []User
db.Find(&users)
// 根据 ID 查询记录
var user User
db.First(&user, 1)
// 更新记录
db.Model(&user).Update("Age", 20)
// 删除记录
db.Delete(&user)
- 高级查询功能
除了基本的 CRUD 操作之外,GORM 还提供了非常强大的高级查询功能,例如分页、排序、预加载、联表查询等。这些功能可以通过链式调用 GORM 方法来实现。
例如:
Copy code
// 分页查询
db.Offset(10).Limit(5).Find(&users)
// 排序查询
db.Order("age desc").Find(&users)
// 预加载
db.Preload("Orders").Find(&users)
// 联表查询
db.Debug().Table("users").Select("users.*, orders.order_no").Joins("join orders on users.id = orders.user_id").Find(&result)
总之,GORM 是一个功能强大的 ORM 框架,它使得使用 Go 语言进行数据库操作更加方便和高效。本文只是简单介绍了一些 GORM 的基本特性和用法,更多的功能和用法可以参考官方文档。