这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
GIN+GORM框架快速入门:
首先当然是它的特性:
(来自官方文档)
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
安装:
我用的是mysql,那么我们就要先导包
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
快速入门:
根据项目框架,一般分为service,dao,controller,model
我们在持久层dao去连接数据库
当然在此之前,我们应该去创建模型:
在这里我创建好了一个User的模型
用户一般有id,username和password
package model
import "gorm.io/gorm"
//用户模型
type User struct {
gorm.Model
ID uint `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
模型创建好后,我们接着在dao里面进行数据库的连接
这里简单的运用了单例工程模式去实现连接数据库后的初始化:
package dao
import (
"blog/model"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
//接口
type Manager interface {
AddUser(user *model.User)
}
type manager struct {
db *gorm.DB
}
var Mgr Manager
//初始化
func init() {
dsn := "root:123@tcp(127.0.0.1:3306)/goDemo_db?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("连接初始化数据库失败", err)
}
Mgr = &manager{db: db}
db.AutoMigrate(&model.User{})
}
//操作数据库
func (m *manager) AddUser(user *model.User) {
m.db.Create(user)
}
接着就是去路由
我们一般把请求都写在路由里面
同时也启动了Gin框架
像这样:
package router
import (
"blog/controller"
"github.com/gin-gonic/gin"
)
func Start() {
//路由
e := gin.Default()
e.POST("/users", controller.AddUser)
e.Run()
}
这样我们就能在不同的层去完成不同层应该完成的任务: