项目笔记(2) | 青训营笔记

117 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

环境搭建

1.引入GORM

首先使用快速开始的代码进行修改

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

2.引入Gin框架

在进行数据库的连接之前,先创建UserBasic结构体,设计其中所需要的字段,为了之后的测试,如下:(新建models文件夹,在文件夹下新建user_basic.go)
image.png 而后创建test测试文件,在golang中需要使用一些驱动包来对指定数据库进行操作,比如MySQL需要使用github.com/go-sql-driver/mysql库,而Sqlite需要使用github.com/mattn/go-sqlite3库来支持,不过好在gorm框架中对各个驱动包进行了简单包装,可以让我们在写程序时可以更方便的管理驱动库。

注意:gorm框架只是简单封装了数据库的驱动包,在安装时仍需要下载原始的驱动包。

pkg.go.dev/ 中查询gin的框架的使用

$ go get -u github.com/jinzhu/gorm
$ go get -u github.com/go-sql-driver/mysql

主要步骤

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

func main() {
  // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

整体框架

//MySQL框架
package main

import (
	"fmt"
	"gochat/models"

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

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  db, err := gorm.Open(mysql.Open("root:密码@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }

  // 迁移 schema
  db.AutoMigrate(&models.UserBasic{})

  // Create
  //注意这里需要自己创建用户,以便后续的使用
  user := &models.UserBasic{}
  user.Name = "小明"
  db.Create(user)

  // Read
//   var product Product
//   db.First(&product, 1) // 根据整型主键查找
//   db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
  fmt.Println(db.First(user,1))

  // Update - 将 product 的 price 更新为 200
  db.Model(user).Update("PasWord", 密码)
  // Update - 更新多个字段
//   db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
//   db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

  // Delete - 删除 product
//   db.Delete(&product, 1)
}

3.将数据和请求关联起来

  1. 在main方法里初始化配置文件以及数据库
utils.InitConfig()
utils.InitMySQL()
  1. 在config包里添加router.yml
mysql:
  dns: root:33664399@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&loc=Local
  1. 新建utils包system_init.go
package utils

import (
	"fmt"

	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

func InitConfig() {
	viper.SetConfigName("router")
	viper.AddConfigPath("config")
	err := viper.ReadInConfig()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("config app:", viper.Get("app"))
}

func InitMySQL() {
	DB, _ := gorm.Open(mysql.Open(viper.GetString("mysql.dns")), &gorm.Config{})
	fmt.Println("config mysql:", viper.Get("mysql"))
}

  1. 到models包里面user_basic.go里面加上下面的方法
func GetUserList() []*UserBasic {
	data := make([]*UserBasic, 10)
	utils.DB.Find(&data)
	for _,v := range data{
		fmt.Println(v)
	}
	return data
}
  1. 到service包里面新建userservice.go
package service

import (
	"gochat/models"

	"github.com/gin-gonic/gin"
)

func GetUserList(c *gin.Context) {
	data := make([]*models.UserBasic, 10)
	data = models.GetUserList()
	c.JSON(200, gin.H{
		"message": data,
	})
}

  1. 到router包的app.go
r.GET("/user/getUserList",service.GetUserList)