弑
弑君者
V1
2023/01/21阅读:36主题:默认主题
yapi文档管理笔记
微服务解决了哪些问题
需要一个注册中心,管理上千个微服务
-
服务是否健康 -
服务发现 -
服务集群是否健康 -
配置中心 -
链路追踪
什么是orm
将数据表映射成go的struct
将数据表中的列映射成struct中的数据类型
gorm
gorm只是让你不需要去关心mysql的繁琐语法,其实就是对于mysql的封装
-
连接数据库
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)
}
-
如果想设置空值
使用sql.NullString设置空值
db.Model(&product).Updates(Product{Price: 200, Code:sql.NullString{String: "", Valid: true}})
-
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;
-
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