GORM连接数据库| 青训营

51 阅读1分钟

首先通过以下命令安装GORM包

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

接下来以 SQLite 数据库为例

  1. 连接数据库:
package main

import (
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"log"
)

func main() {
	// 连接数据库
	db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 迁移数据库(创建表)
	db.AutoMigrate(&User{})
}
  1. 定义数据模型:
package main

import (
	"gorm.io/gorm"
)

type User struct {
	gorm.Model
	Name  string
	Email string
}
  1. 增加数据:
func createUser(db *gorm.DB, name, email string) {
	user := User{Name: name, Email: email}
	result := db.Create(&user)
	if result.Error != nil {
		log.Println("Error creating user:", result.Error)
	}
}
  1. 查询数据:
func getUserByID(db *gorm.DB, id uint) (User, error) {
	var user User
	result := db.First(&user, id)
	if result.Error != nil {
		return User{}, result.Error
	}
	return user, nil
}

func getAllUsers(db *gorm.DB) ([]User, error) {
	var users []User
	result := db.Find(&users)
	if result.Error != nil {
		return nil, result.Error
	}
	return users, nil
}
  1. 更新数据:
func updateUser(db *gorm.DB, id uint, newName string) error {
	var user User
	result := db.First(&user, id)
	if result.Error != nil {
		return result.Error
	}

	user.Name = newName
	result = db.Save(&user)
	if result.Error != nil {
		return result.Error
	}
	return nil
}
  1. 删除数据:
goCopy code
func deleteUser(db *gorm.DB, id uint) error {
	var user User
	result := db.Delete(&user, id)
	if result.Error != nil {
		return result.Error
	}
	return nil
}

最后,在 main 函数中测试上述的增删改查操作:

func main() {
	// ... 连接数据库等代码 ...

	createUser(db, "Alice", "alice@example.com")

	user, err := getUserByID(db, 1)
	if err != nil {
		log.Println("Error getting user:", err)
	} else {
		log.Println("User:", user)
	}

	users, err := getAllUsers(db)
	if err != nil {
		log.Println("Error getting users:", err)
	} else {
		log.Println("All users:", users)
	}

	err = updateUser(db, 1, "Alicia")
	if err != nil {
		log.Println("Error updating user:", err)
	}

	err = deleteUser(db, 1)
	if err != nil {
		log.Println("Error deleting user:", err)
	}
}