GORM介绍
ORM(Object Relational Mapping),意思是对象关系映射。它在关系型数据库和对象之间作一个映射,这样,在操作数据库时,就无需要再去编写复杂的SQL语句。 GORM(Go Object Relational Mapping) 是一个在 Go 语言中使用的强大的 ORM 框架,用于简化数据库操作。它允许你通过 Go 的结构体来定义数据模型,并且能够自动地将这些结构体映射到数据库表中,从而实现对象和关系型数据库之间的映射。
GORM特性
- 模型映射: GORM 允许你通过 Go 结构体来定义数据库表的模型。你可以在结构体上使用 struct tag 来定义表名、字段名、索引、约束等信息。
- 数据库迁移: GORM 提供了自动迁移的功能,可以根据定义的模型自动生成数据库表结构,从而避免手动创建表的繁琐工作。
- CRUD 操作: GORM 提供了丰富的方法来进行增删改查操作。你可以使用链式调用来构建查询语句,还可以使用事务来保证数据的一致性。
- 关联关系: GORM 支持多种类型的关联关系,如一对一、一对多、多对多等。你可以在模型中使用字段标签来定义关联关系。
- 事务管理: GORM 允许你使用事务来执行一系列操作,确保这些操作要么全部成功要么全部失败,以保证数据的完整性。
- Hooks(钩子函数): 你可以在模型上定义各种生命周期钩子函数,例如在创建、更新、删除等操作前后执行特定的逻辑。
- 预加载: GORM 支持预加载(Eager Loading),可以在查询数据时一次性加载相关联的数据,避免 N+1 查询问题。
- 原生 SQL: 尽管 GORM 提供了丰富的查询方法,但你也可以使用原生 SQL 语句来执行复杂的查询或更新操作。
- 数据库支持: GORM 支持多种数据库,包括但不限于 MySQL、PostgreSQL、SQLite、SQL Server 等。
使用GORM操作mysql实践
安装gorm
##gorm
go get -u gorm.io/gorm
##数据库驱动
go get -u gorm.io/driver/mysql
导入驱动和gorm
import (
"gorm.io/driver/mysql" // mysql 驱动包
"gorm.io/gorm"// gorm
)
使用navicat创建user表后创建数据表对应的结构体
type User struct {
ID uint `gorm:"primaryKey"`
Username string `gorm:"unique"`
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
数据库链接
// 配置数据库连接
dsn := "root:pwd@tcp(127.0.0.1:3306)/testgorm?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
log.Fatal(err)
}
增删改查
// 增加数据
user := User{Username: "john_doe", Email: "john@example.com"}
result := db.Create(&user)
if result.Error != nil {
log.Fatal(result.Error)
}
fmt.Println("User created:", user)
// 查询数据
var queriedUser User
result = db.First(&queriedUser, "username = ?", "john_doe")
if result.Error != nil {
log.Fatal(result.Error)
}
fmt.Println("Queried user:", queriedUser)
// 更新数据
result = db.Model(&queriedUser).Update("Email", "updated@example.com")
if result.Error != nil {
log.Fatal(result.Error)
}
fmt.Println("User updated:", queriedUser)
// 删除数据
result = db.Delete(&queriedUser)
if result.Error != nil {
log.Fatal(result.Error)
}
fmt.Println("User deleted:", queriedUser)