弑君者

V1

2023/01/21阅读:36主题:默认主题

yapi文档管理笔记

微服务解决了哪些问题

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

  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";

软删除

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

分类:

后端

标签:

后端

作者介绍

弑君者
V1