数据库框架GORM快速入门【干货】

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 main

import (
	"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() 根据主键查找用户,找到的第一个记录会赋值给 user
	err := db.First(&user, id).Error
	return &user, err
}

// 根据年龄查询多个用户
func QueryUsers(db *gorm.DB, age int) ([]User, error) {
	var users []User // 创建一个切片,用于存放查询到的多个用户
	// db.Where() 构造查询条件,db.Find() 执行查询并将结果赋值给 users
	err := db.Where("age = ?", age).Find(&users).Error
	return users, err
}

func main() {
	db, err := InitDB() // 初始化数据库连接
	if err != nil {
		fmt.Println("Database connection failed:", err)
		return
	}

	// 进行数据库迁移,即将结构体转换为数据库中的表,
	// 表名为结构体名小写+s
	if 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)//根据主键删除单个对象

注意:查询操作必须传入指针才能获取结果,其他操作也建议传入指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值