Go食用日常之使用GORM操作数据库|Go主题月

972 阅读1分钟

前言

在日常开发中,免不了要和数据库打交道,那么在go如何orm的方式进行操作数据库呢?这次我们来试试吧!

连接

首先我们需要引入gorm

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

然后编写连接数据库的方法:

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func ConnectDB(host, name, username, password string, port int) (db *gorm.DB, err error) {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4", username, password, host, port, name)
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	return
}

迁移

gorm带有迁移功能,具体参见: 迁移 | GORM ,在这里我们需要先定义我们的数据模型(具体规则可参见 模型定义 | GORM):

type Student struct {
	Id int `gorm:"primaryKey;autoIncrement"`
	Name string `gorm:"type:varchar(10);not null"`
	Age int `gorm:"type:int(3);not null"`
	Address string `gorm:"type:varchar(50);not null"`
}

然后进行迁移执行:

func main() {
	db, err := ConnectDB("127.0.0.1", "juejin", "root", "root", 3306)
	if err != nil {
		panic(err)
	}
	err = db.AutoMigrate(&Student{})
	if err != nil {
		panic(err)
	}
}

基本操作

插入数据

func InsertData(db *gorm.DB) {
	loop := 10
	students := make([]Student, 0, loop)
	for i := 1; i <= loop; i++ {
		students = append(students, Student{
			Name: fmt.Sprintf("学生%d", i),
			Age: i * 2,
			Address: fmt.Sprintf("xxx省xxx市%d号", i),
		})
	}
	err := db.Create(students).Error
	if err != nil {
		panic(err)
	}
}

查询数据

func FindStudentById(db *gorm.DB, id int) (res Student) {
	err := db.Model(&Student{}).First(&res, id).Error
	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		// gorm里如果没有找到记录,也会返回error,可参见:https://gorm.io/zh_CN/docs/query.html
		panic(err)
	}
	return
}

更新数据

func UpdateStudentNameById(db *gorm.DB, id int, newName string) (res bool) {
	rows := db.Model(&Student{}).Where(&Student{Id: id}).Updates(&Student{Name: newName}).RowsAffected
	if rows > 0 {
		res = true
	}
	return
}

删除数据

func RemoveStudentById(db *gorm.DB, id int) (res bool) {
	rows := db.Model(&Student{}).Delete(&Student{Id: id}).RowsAffected
	if rows > 0 {
		res = true
	}
	return
}

后记

本文只是简单的为大家介绍了gorm的入门用法,大家可以参考官方的中文文档,里面有更多详细的示例:GORM中文文档

最后,感谢大家的阅读,谢谢!