02-gorm整合gin框架

1,下载gin依赖

go get -u github.com/gin-gonic/gin

2,代码演示

2.1,完成GlobalVariabel.go保存全局变量

2.2,完成 MysqlConf.go

package config

import (
	"go_gorm/src/config"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

//配置mysql连接
func MysqlConf() (mysqlDB *gorm.DB) {
	configInfo := config.InitConf()
	db,_ := gorm.Open(mysql.New(mysql.Config{
		DriverName:                    "",
		ServerVersion:                 "",
		DSN:                           configInfo.MysqlUrl,
		DSNConfig:                     nil,
		Conn:                          nil,
		SkipInitializeWithVersion:     false,
		DefaultStringSize:             174,
		DefaultDatetimePrecision:      nil,
		DisableWithReturning:          false,
		DisableDatetimePrecision:      false, //是否禁用datetime精度
		DontSupportRenameIndex:        false, //是否重命名索引时采用删除并新建的方式
		DontSupportRenameColumn:       false,
		DontSupportForShareClause:     false,
		DontSupportNullAsDefaultValue: false,
	}),&gorm.Config{
		SkipDefaultTransaction:                   false,
		FullSaveAssociations:                     false,
		Logger:                                   nil,
		NowFunc:                                  nil,
		DryRun:                                   false,
		PrepareStmt:                              false,
		DisableAutomaticPing:                     false,
		DisableForeignKeyConstraintWhenMigrating: true,
		DisableNestedTransaction:                 false,
		AllowGlobalUpdate:                        false,
		QueryFields:                              false,
		CreateBatchSize:                          0,
		ClauseBuilders:                           nil,
		ConnPool:                                 nil,
		Dialector:                                nil,
		Plugins:                                  nil,
	})

	sqlDB,_:=db.DB()
	sqlDB.SetMaxIdleConns(10) //连接池中最大空闲连接数
	sqlDB.SetMaxOpenConns(100) //连接池最多容纳数量
	sqlDB.SetConnMaxLifetime(time.Hour)//连接池中连接最大可复用时间
	return db
}

2.3,完成 ResultBase.go

package base

type ResultBase struct {
	Flag bool
	Res interface{}
}

2.4,完成 TestUser.go

package rto

import "gorm.io/gorm"

type TestUser struct {
	gorm.Model
	Name string `json:"name" form:"name"`
	Age uint8 `json:"age" form:"age"`
}

2.5,完成 TestUserRto.go

package rto

type TestUserRto struct {
	Id uint `json:"id" form:"id"`
	Name string `json:"name" form:"name"`
	Age uint `json:"age" form:"age"`
}

2.6,完成 TestUserVo.go

package vo

import "time"

type TestUserVo struct {
	Id int64 `json:"id"`
	Created_at time.Time `json:"createdAt"`
	Updated_at time.Time `json:"updatedAt"`
	Name string  `json:"name"`
	Age uint8 `json:"age"`
}

2.7,完成 TestUserService.go

package service

import (
	"errors"
	"github.com/gin-gonic/gin"
	"go_gorm/src/demo04_crud_gin/entity/base"
	"go_gorm/src/demo04_crud_gin/entity/rto"
	"go_gorm/src/demo04_crud_gin/entity/vo"
	"go_gorm/src/entity/variable"
	"gorm.io/gorm"
)

type TestUserService struct {

}

func (testUserService TestUserService) QueryUser (c *gin.Context)  {
	rto := &rto.TestUserRto{}
	c.ShouldBind(&rto)

	User := []vo.TestUserVo{}

	res := base.ResultBase{}

	dbRes := variable.GLOBAL_DB.Table("test_users").Where("name like ?","%"+rto.Name+"%").Find(&User)

	if(errors.Is(dbRes.Error,gorm.ErrRecordNotFound)){
		res.Flag = false
		res.Res = "没查到数据"
		c.JSON(200,res)
	}else{
		res.Flag = true
		res.Res = User
		c.JSON(200,res)
	}
}

func (testUserService TestUserService) AddUser (c *gin.Context)  {
	rto := &[]rto.TestUser{}
	c.ShouldBind(&rto)

	res := base.ResultBase{}

	dbres := variable.GLOBAL_DB.Create(&rto)
	if(dbres.Error != nil){
		res.Flag = false
		res.Res = dbres.Error
		c.JSON(200,res)
	}
	res.Flag = true
	res.Res = dbres.RowsAffected
	c.JSON(200,res)
}

func (testUserService TestUserService) UpdateUser (c *gin.Context)  {
	rto := &rto.TestUserRto{}
	c.ShouldBind(&rto)

	res := base.ResultBase{}

	dbres := variable.GLOBAL_DB.
		Table("test_users").
		Where("id = ?",rto.Id).
		Updates(rto)
	if(dbres.Error != nil){
		res.Flag = false
		res.Res = dbres.Error
		c.JSON(200,res)
	}else{
		res.Flag = true
		res.Res = "更新成功"
		c.JSON(200,res)
	}
}

2.8,完成 TestUserController.go

package controller

import (
	"github.com/gin-gonic/gin"
	"go_gorm/src/demo04_crud_gin/service"
)

func TestUserController(engine *gin.Engine)  {
	testUserController := engine.Group("/testUser")
	{
		testUserController.POST("/queryUser",service.TestUserService{}.QueryUser)
		testUserController.POST("/addUser",service.TestUserService{}.AddUser)
		testUserController.POST("/updateUser",service.TestUserService{}.UpdateUser)
	}

}


2.9,完成 main.go

package main

import (
	"github.com/gin-gonic/gin"
	"go_gorm/src/demo04_crud_gin/config"
	"go_gorm/src/demo04_crud_gin/controller"
	"go_gorm/src/entity/variable"
)

func main() {
	var db = config.MysqlConf();
	variable.GLOBAL_DB = db
	router := gin.Default();
	controller.TestUserController(router)
	router.Run(":8081")
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值