GORM 简单介绍

GORM是Golang的一个orm框架。
简单说,GORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,
是"对象-关系映射"(Object/Relational Mapping)的缩写。
使用ORM框架可以让我们更方便的操作数据库。
GORM官方支持的数据库类型有:
MISQL, PostgreSQL, SQlite, SQL Server

https://gorm.io/zh_CN/

在实际项目中定义数据库模型注意以下几点:

1、结构体的名称必须首字母大写,并和数据库表名称对应。
例如:表名称为user结构体;
名称定义成User,表名称为 article_cate结构体名称定义成ArticleCate

2、结构体中的字段名称首字母必须大写,并和数据库表中的字段一一对应。
例如:下面结构体中的Id和数据库中的 id 对应,
Username和数据库中的username 对应,
Age和数据库中的age对应,
Email 和数据库中的email对应,
AddTime和数据库中的add_time字段对应

3、默认情况表名是结构体名称的复数形式。
如果我们的结构体名称定义成User,
表示这个模型默认操作的是users表。

实现查询某个库中的表

modules\connectMySQL.go

package modules

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

var DB *gorm.DB
var err error

func init() {
	// 请替换为你的实际数据库信息
	// parseTime=True 和 loc=Local 确保时间类型能正确解析
	// zhangsan123 是数据库密码,根据实际情况修改
	// school 是数据库名称,根据实际情况修改
	dsn := "root:zhangsan123@tcp(127.0.0.1:3306)/school?charset=utf8mb4&parseTime=True&loc=Local"
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database: " + err.Error())
	}
}

引入并且安装

https://gorm.io/zh_CN/docs/

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

image
然后执行

go mod tidy

af960da0-4cda-46a0-b4ea-81dd3d42baf3

modules\class.go

package modules

type Class struct {
	ID    int
	Name  string
	Email string
	Score int
}

func (Class) TableName() string {
	return "class"
}

这个Class 结构体中的数据和数据库中的结构体数据要保持一致的哈
image

main.go

package main

import (
	"gin-quickstart/modules"
	"gin-quickstart/routers"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

// "gin-quickstart/routers" 表示引入 routers 包(也就是引入我们创建的路由文件夹),用于注册路由

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// 配置session中间件,基于cookie存储引擎
	store := cookie.NewStore([]byte("miYao"))
	r.Use(sessions.Sessions("mysession", store))
	// 允许跨域中间件(注意:必须写在路由注册【之前】才对已注册路由生效)
	r.Use(func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*") // 允许所有来源(学习阶段够用)
		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Header("Access-Control-Allow-Headers", "Content-Type")
		// 浏览器发复杂请求前会先发 OPTIONS 预检,直接放行
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}
		c.Next()
	})

	// 注册用户路由,routers表示的是路由包,
	// UserRouters表示的是路由函数(也就是这个包中user.go文件中的函数)
	routers.UserRouters(r)

	r.GET("/session/set", func(c *gin.Context) {
		session := sessions.Default(c)
		// 设置session
		session.Set("sessionID", "zs20161016")
		// 保存session,这一步是必须的哈
		session.Save()
		c.JSON(200, gin.H{
			"msg": "hello gin",
		})
	})

	r.GET("/session/get", func(c *gin.Context) {
		session := sessions.Default(c)
		// 获取session:Get 只返回一个值,取不到时返回 nil
		sessionID := session.Get("sessionID")
		c.JSON(200, gin.H{
			// 转换为字符串类型
			"msg": "sessionID: " + sessionID.(string),
		})
	})
    
    // 查询
	r.GET("/class", func(c *gin.Context) {
		classList := []modules.Class{}
		modules.DB.Find(&classList)
		c.JSON(200, gin.H{
			"msg":  "获取班级列表成功",
			"list": classList,
		})
	})

	// 启动服务,端口为8080,当然你也可以更改的哈
	r.Run(":8087")
}

http://localhost:8087/class
image

实现添加功能

package main

import (
	"gin-quickstart/modules"
	"gin-quickstart/routers"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

// "gin-quickstart/routers" 表示引入 routers 包(也就是引入我们创建的路由文件夹),用于注册路由

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// 配置session中间件,基于cookie存储引擎
	store := cookie.NewStore([]byte("miYao"))
	r.Use(sessions.Sessions("mysession", store))
	// 允许跨域中间件(注意:必须写在路由注册【之前】才对已注册路由生效)
	r.Use(func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*") // 允许所有来源(学习阶段够用)
		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Header("Access-Control-Allow-Headers", "Content-Type")
		// 浏览器发复杂请求前会先发 OPTIONS 预检,直接放行
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}
		c.Next()
	})

	// 注册用户路由,routers表示的是路由包,
	// UserRouters表示的是路由函数(也就是这个包中user.go文件中的函数)
	routers.UserRouters(r)

	r.GET("/session/set", func(c *gin.Context) {
		session := sessions.Default(c)
		// 设置session
		session.Set("sessionID", "zs20161016")
		// 保存session,这一步是必须的哈
		session.Save()
		c.JSON(200, gin.H{
			"msg": "hello gin",
		})
	})

	r.GET("/session/get", func(c *gin.Context) {
		session := sessions.Default(c)
		// 获取session:Get 只返回一个值,取不到时返回 nil
		sessionID := session.Get("sessionID")
		c.JSON(200, gin.H{
			// 转换为字符串类型
			"msg": "sessionID: " + sessionID.(string),
		})
	})

	r.GET("/addClass", func(c *gin.Context) {
        // 不需要制定id,因为id会自动新增的
		class := modules.Class{
			Name:  "周末",
			Email: "123456@163.com",
			Score: 33,
		}
		modules.DB.Create(&class)
		c.JSON(200, gin.H{
			"msg": "添加班级成功",
		})
	})

	// 启动服务,端口为8080,当然你也可以更改的哈
	r.Run(":8087")
}

image
image


原文地址: https://www.cveoy.top/t/topic/qHRv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录