Gorm框架学习 | 青训营笔记

100 阅读2分钟

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"`
​

注意事项

  1. 结构体里面的变量(Name)必须首字母大写,否则创建不出列,会被自动忽略
  2. gorm指定类型
  3. json表示json接收的时候的名称
  4. 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.接口测试

image-20230801213743056.png

查看数据库,数据存在!!

gorm基本知识

官网gorm.io/zh_CN/docs/…

CRUD 接口

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
​
result := db.Create(&user) // 通过数据的指针来创建
​
user.ID             // 返回插入数据的主键
result.Error        // 返回 error
result.RowsAffected // 返回插入记录的条数