本次记录如何在gin中简单的使用和封装gorm

创建database.go,用于定义gorm连接数据库的配置和DB的统一引用

database.go

package common
import (
	"fmt"

	"note.hello-api.cn/model"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

func InitDB() *gorm.DB {
	host := "localhost"
	port := "3306"
	username := "gin"
	database := "gin"
	password := "gingin"
	charset := "utf8mb4"
	arg := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
		username,
		password,
		host,
		port,
		database,
		charset)

	db, err := gorm.Open(mysql.Open(arg))
	if err != nil {
		panic(err.Error())
	}
	db.AutoMigrate(&model.User{})
	db.AutoMigrate(&model.Note{})
	DB = db
	return db
}

func GetDB() *gorm.DB {
	return DB
}

在gin的入口main.go中初始化DB,并且自动创建表结构

func main() {
	common.InitDB()
	r := gin.Default()
	r = controller.CollectRoute(r)
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

在controller控制方法中进行增删查改

package controller

import (
	"fmt"

	"github.com/gin-gonic/gin"
	"note.hello-api.cn/common"
	"note.hello-api.cn/model"
)

type NodeController struct {
	BaseController
}

func (con NodeController) Index(ctx *gin.Context) {
	var result []model.Note
	db := common.GetDB()
	db.Model(&model.Note{}).Limit(10).Find(&result)
	fmt.Printf("result: %v\n", result)
	con.returnResponse(ctx, gin.H{"Data": result})
}

func (con NodeController) Instance(ctx *gin.Context) {
	var result model.Note
	db := common.GetDB()
	db.Model(&model.Note{}).First(&result)
	fmt.Printf("result: %v\n", result)
	con.returnResponse(ctx, gin.H{"Data": result})
}

func (con NodeController) Create(ctx *gin.Context) {
	db := common.GetDB()
	question := ctx.PostForm("question")
	note := model.Note{}
	note.Question = question
	db.Create(&note)
	con.returnResponse(ctx, gin.H{})
}