yapi文档管理笔记

66 阅读2分钟

微服务解决了哪些问题

需要一个注册中心,管理上千个微服务

  1. 服务是否健康
  2. 服务发现
  3. 服务集群是否健康
  4. 配置中心
  5. 链路追踪

什么是orm

将数据表映射成go的struct

将数据表中的列映射成struct中的数据类型

gorm

gorm只是让你不需要去关心mysql的繁琐语法,其实就是对于mysql的封装

  1. 连接数据库

package main

import (
	"database/sql"
	"log"
	"os"
	"time"

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

type Product struct {
	gorm.Model
	Code  sql.NullString
	Price uint
}

func main() {
	// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
	dsn := "root:guilai123@tcp(127.0.0.1:3306)/gorm_test?charset=utf8mb4&parseTime=True&loc=Local"

	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
		logger.Config{
			SlowThreshold: time.Second,   // 慢 SQL 阈值
			LogLevel:      logger.Info, // Log level
			Colorful:      true,         // 禁用彩色打印
		},
	)

	// 全局模式
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: newLogger,
	})
	if err != nil {
		panic(err)
	}
	//设置全局的logger,这个logger在我们执行每个sql语句的时候会打印每一行sql
	//sql才是最重要的,本着这个原则我尽量的给大家看到每个api背后的sql语句是什么

	//定义一个表结构, 将表结构直接生成对应的表 - migrations
	// 迁移 schema
	_ = db.AutoMigrate(&Product{}) //此处应该有sql语句

	// 新增
	db.Create(&Product{Code: sql.NullString{"D42", true}, Price: 100})

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

	// Update - 将 product 的 price 更新为 200
	db.Model(&product).Update("Price", 200)
	// Update - 更新多个字段
	db.Model(&product).Updates(Product{Price: 200, Code:sql.NullString{"", true}}) // 仅更新非零值字段
	//如果我们去更新一个product 只设置了price:200
	//db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

	// Delete - 删除 product, 并没有执行delete语句,逻辑删除
	db.Delete(&product, 1)
}

  1. 如果想设置空值

使用sql.NullString设置空值

db.Model(&product).Updates(Product{Price: 200, Code:sql.NullString{String: "", Valid: true}})
  1. gorm 更新

更新

db.First(&user)
user.Name = "jinzhu 2"
user.Age = 100
db.Save(&user)
// UPDATE users SET name='jinzhu 2', age=100, birthday='2016-01-01', updated_at = '2013-11-17 21:34:10' WHERE id=111;
  1. gorm 删除

// Email's ID is `10`
db.Delete(&email)
// DELETE from emails where id = 10;
// Delete with additional conditions
db.Where("name = ?", "jinzhu").Delete(&email)
// DELETE from emails where id = 10 AND name = "jinzhu";

软删除

并不是从物理上删除,而是从逻辑上删除

本文由mdnice多平台发布