Gorm框架学习
快速入门
1.安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
安装gorm.io/driver/sqlite遇到的问题,需要安装gcc,配置安装gcc以后再次安装gorm.io/driver/sqlite
2.导包
import (
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
3.快速开始
dsn := "root:123456@tcp(127.0.0.1:3306)/crud-list?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
}, //表名单数配置,默认是复数
}) //连接数据库
4.连接池配置
// 连接池
sqlDB, err := db.DB()
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(10 * time.Second) // 10秒钟
5.创建实体
type List struct {
gorm.Model
Name string `gorm:"type:varchar(20); not null" json:"name" binding:"required"`
State string `gorm:"type:varchar(20); not null" json:"state" binding:"required"`
Phone string `gorm:"type:varchar(20); not null" json:"phone" binding:"required"`
Email string `gorm:"type:varchar(40); not null" json:"email" binding:"required"`
Address string `gorm:"type:varchar(200); not null" json:"address" binding:"required"`
} //实体
//gorm.Model
//type Model struct {
// ID uint `gorm:"primarykey"`
// CreatedAt time.Time
// UpdatedAt time.Time
//DeletedAt DeletedAt `gorm:"index"`
//} gorm.Model会给实体加上这几个属性
6.实体约束
`gorm:"type:varchar(20); not null" json:"name" binding:"required"`
注意事项
- 结构体里面的变量(Name)必须首字母大写,否则创建不出列,会被自动忽略
- gorm指定类型
- json表示json接收的时候的名称
- binding required表示必须传入
7.测试
func addUser(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
var data List
err := c.ShouldBind(&data) //属性绑定
if err != nil { //绑定失败
fmt.Println(data )
c.JSON(200,gin.H{
"msg": "绑定失败",
"data":"",
"code":"400",
})
}else{
db.Create(&data)//创建数据
c.JSON(200,gin.H{
"msg": "添加成功",
"data": data,
"code":"200",
})
}
}
}
r.POST("/user/add",addUser(db))
8.接口测试
查看数据库,数据存在!!
gorm基本知识
CRUD 接口
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // 通过数据的指针来创建
user.ID // 返回插入数据的主键
result.Error // 返回 error
result.RowsAffected // 返回插入记录的条数