本次记录如何在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(¬e)
con.returnResponse(ctx, gin.H{})
}