1. 安装 GORM 和 MySQL 驱动
首先,你需要安装 GORM 和 MySQL 驱动。可以使用以下命令:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
2. 连接 MySQL 数据库
通过 gorm.io/driver/mysql 连接 MySQL 数据库
package main
import (
"fmt"
"log"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 定义数据模型
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
Age int
}
func main() {
// 数据库连接信息
dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8&parseTime=True&loc=Local"
// 连接数据库
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("连接数据库失败:", err)
}
fmt.Println("数据库连接成功!")
// 自动迁移,创建数据表
db.AutoMigrate(&User{})
}
-
dsn是 MySQL 的数据源名称(Data Source Name)。root:password是 MySQL 的用户名和密码,tcp(127.0.0.1:3306)是 MySQL 的连接地址,testdb是数据库的名称。 -
如果没有
testdb数据库,需要手动在 MySQL 中创建。
3. 增加数据(Create)
插入数据时,使用 Create 方法:
func createUser(db *gorm.DB) {
user := User{Name: "Alice", Age: 30}
result := db.Create(&user)
if result.Error != nil {
log.Println("插入数据失败:", result.Error)
} else {
fmt.Println("插入数据成功:", user)
}
}
4. 查询数据(Read)
查询数据时,可以使用 First(查询第一条记录)、Find(查询所有记录)或者 Where 方法。
- 查询单个记录:
func getUserById(db *gorm.DB, id uint) {
var user User
result := db.First(&user, id)
if result.Error != nil {
log.Println("查询数据失败:", result.Error)
} else {
fmt.Println("查询结果:", user)
}
}
- 查询所有记录:
func getAllUsers(db *gorm.DB) {
var users []User
result := db.Find(&users)
if result.Error != nil {
log.Println("查询数据失败:", result.Error)
} else {
fmt.Println("所有用户:", users)
}
}
5. 更新数据(Update)
更新操作时,可以使用 Save 或 Updates 方法。Save 会将所有字段更新,而 Updates 只会更新指定字段。
- 更新单个字段:
func updateUserAge(db *gorm.DB, id uint, newAge int) {
var user User
if err := db.First(&user, id).Error; err != nil {
log.Println("查询数据失败:", err)
return
}
user.Age = newAge
result := db.Save(&user)
if result.Error != nil {
log.Println("更新数据失败:", result.Error)
} else {
fmt.Println("更新成功:", user)
}
}
- 更新多个字段:
func updateUserInfo(db *gorm.DB, id uint, name string, age int) {
result := db.Model(&User{}).Where("id = ?", id).Updates(User{Name: name, Age: age})
if result.Error != nil {
log.Println("更新数据失败:", result.Error)
} else {
fmt.Println("更新成功")
}
}
6. 删除数据(Delete)
删除数据时,可以通过 Delete 方法实现:
func deleteUser(db *gorm.DB, id uint) {
var user User
if err := db.First(&user, id).Error; err != nil {
log.Println("查询数据失败:", err)
return
}
result := db.Delete(&user)
if result.Error != nil {
log.Println("删除数据失败:", result.Error)
} else {
fmt.Println("删除成功")
}
}