1.安装依赖
(1)安装GORM框架
go get -u gorm.io/gorm
(2)安装不同的数据库驱动(根据实际情况选择)
go get -u gorm.io/driver/mysql
go get -u gorm.io/driver/postgres
go get -u gorm.io/driver/sqlite
go get -u gorm.io/driver/sqlserver
2.示例(以mysql为例)
注意:除了连接数据库的操作,其余操作对于所有GORM支持的数据库是通用的。
package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)// 数据库连接设置
var (UserName = "root"Password = "123456"Host = "localhost" //本地数据库地址Port = "3306" //默认端口DBName = "db01"
)// 定义数据库表的字段
type User struct {ID int `gorm:"primaryKey"` // 主键字段,GORM 会自动识别Name string // 用户名字段Age int // 年龄字段Email string // 邮箱字段
}// 初始化数据库连接
func InitDB() (*gorm.DB, error) {// 数据源名称,包含用户名、密码、数据库名等信息dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",UserName, Password, Host, Port, DBName)// 连接数据库db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {return nil, err}return db, nil
}// 根据 ID 查询用户
func QueryUser(db *gorm.DB, id int) (*User, error) {var user User // 创建一个 User 变量用于存放查询结果// db.First() 根据主键查找用户,找到的第一个记录会赋值给 usererr := db.First(&user, id).Errorreturn &user, err
}// 根据年龄查询多个用户
func QueryUsers(db *gorm.DB, age int) ([]User, error) {var users []User // 创建一个切片,用于存放查询到的多个用户// db.Where() 构造查询条件,db.Find() 执行查询并将结果赋值给 userserr := db.Where("age = ?", age).Find(&users).Errorreturn users, err
}func main() {db, err := InitDB() // 初始化数据库连接if err != nil {fmt.Println("Database connection failed:", err)return}// 进行数据库迁移,即将结构体转换为数据库中的表,// 表名为结构体名小写+sif err := db.AutoMigrate(&User{}); err != nil {fmt.Println("Database migration failed:", err)return}// 创建新用户newUser := &User{Name: "Alice", Age: 25,Email: "alice@example.com"} // 创建用户对象// db.Create() 会将 user 对象插入到数据库中if err := db.Create(newUser).Error; err != nil {fmt.Println("Error creating user:", err)return}// 查询用户user, err := QueryUser(db, newUser.ID) // 根据新用户的 ID 查询if err != nil {fmt.Println("Error querying user:", err)return}fmt.Println("Queried User:", user) // 打印查询结果// 查询多个用户users, err := QueryUsers(db, 25) // 查询年龄为 25 的用户if err != nil {fmt.Println("Error querying users:", err)return}fmt.Println("Users with age 25:", users) // 打印查询到的用户列表// 更新用户信息user.Age = 26 // 修改用户年龄// db.Save() 会根据主键更新用户信息if err := db.Save(user).Error; err != nil {fmt.Println("Error updating user:", err)return}// 删除用户// db.Delete() 根据主键删除用户记录if err := db.Delete(&User{}, user.ID).Error; err != nil {fmt.Println("Error deleting user:", err)return}fmt.Println("User deleted successfully.")
}
3.CURD总结
C:Create(增加),U:Update(更新),R:Read(查询),D:Delete(删除)
db.Create(newUser)//增加新对象,newUser是结构体指针
db.Save(user)//更新指定对象,user是结构体指针
db.First(&user, id)//根据主键查询单个对象
db.Where("age = ?", age).Find(&users)//按条件查询多个对象,注意users是切片
db.Delete(&User{}, user.ID)//根据主键删除单个对象
注意:查询操作必须传入指针才能获取结果,其他操作也建议传入指针。