这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。
1. gorm框架介绍
gorm官方文档:gorm.io/docs/
什么是orm?
Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库
它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。
什么是gorm,有什么特点?
gorm是用Golang实现的,GitHub上活跃度很高的orm库
特点:
- 全功能ORM;
- 关联(包含一个,包含多个,属于,多对多,多种包含);
- Callbacks(创建/保存/更新/删除/查找之前/之后);
- 预加载;
- 事务
- 复合主键
- SQL Builder
- 自动迁移
- 日志
- 可扩展,编写基于GORM回调的插件
- 每个功能都有测试
- 开发人员友好
基本操作:
package dao
import (
"TikTok/constdef"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
type Product struct {
gorm.Model
Code string
Price uint
}
// Create connection
func Init() {
var err error
dsn := "root:123456@tcp(localhost:8080)/Data?charset=utf8mb4&parseTime=True&loc=Local"
fmt.Println(dsn)
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true,
})
//DB.DB().SetMaxOpenConns(100)
//DB.DB().SetMaxIdleConns(10)
if err != nil {
panic(err)
}
DB.AutoMigrate(&product{})
if err != nil {
panic(err)
}
}
// CURD examples
func CURDOp(){
db.Create(&Product{Code: "L1212", Price: 1000})
// 查
var product Product
db.First(&product, 1) // 找到id为1的产品
db.First(&product, "code = ?", "L1212") // 找出 code 为 l1212 的产品
// 改 - 更新产品的价格为 2000
db.Model(&product).Update("Price", 2000)
// 删 - 删除产品
db.Delete(&product)
}