关于GORM的发展过程
GORM 项目初衷与发展历程 GORM 最开始源于 2013 年,当时在做一个支付系统,当时 Golang 的生态圈不够成熟,没找到符合自己需求的库,然后拼 SQL 拼烦了,然后自己花了一个周未的时间做了第一版,帮项目顺利上线。
GORM的优越设计理念 GORM 遵从了 API 精简,测试优先,最小惊讶,自由组合扩展,无依赖的设计理论,争做一个健壮的可信赖的开源产品。
GORM 项目在字节跳动内部的实践应用 GORM 在字节跳动的应用很广泛,公司内部社群比 GORM 所有的微信群加起来的人数多的多,现在广泛应用在字节跳动的上万个 Go 的微服务当中
GORM的设计原理图
SQL是怎么生成的
SQL语句例子:
SELECT `name`, `age `, `employee_number'
FROM `users'
WHERE
`role` > "manager" AND `age` > 35
ORDER BY `age` DESC
LIMIT 10 OFFSET 10
FOR UPDATE
GROM配置
开启go model
开启go mod
go env -w GO111MODULE=on
这个命令会在当前目录创建一个名为go.mod的文件, 在本文中不会修改它的内容
go mod init huzhenwei.top/utils
设置go model
go env
最后找到:GOPROXY
输入代理:
导入依赖:
go get github.com/jinzhu/gorm
go get github.com/jinzhu/gorm/dialects/mysql
查看go.sum文件是否导入成功
初步体验GROM操作
1、结构体映射建立数据库表
2、插入一条数据
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"log"
"time"
)
// Info 结构体名、变量名一定要使用大驼峰命名法(每个单词首字母大写)
type Info struct {
gorm.Model
Name string
}
func main() {
db, err := gorm.Open("mysql", "root:XXXXXXX@tcp(127.0.0.1:3306)/mybatis?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
log.Print(err)
}
// 结构体映射成为数据库表
migrate := db.AutoMigrate(&Info{})
if migrate.Error != nil {
fmt.Println(migrate.Error)
}
model := gorm.Model{
CreatedAt: time.Time{},
UpdatedAt: time.Time{},
DeletedAt: nil,
}
info := Info{model, "小黄"}
// 插入数据
db.Create(&info)
fmt.Println("ok")
// 关闭数据库连接
defer func(db *gorm.DB) {
err := db.Close()
if err != nil {
log.Println(err)
}
}(db)
}