Gorm教程
大约 1 分钟
安装
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
viper-读取配置文件
https://github.com/spf13/viper
go get github.com/spf13/viper
初始化
表迁移
func MigrateTable() {
M := db.Migrator()
if !M.HasTable(&MovieCate{}) {
M.CreateTable(&MovieCate{})
}
}
// 或者是
db.AutoMigrate(&MovieCate{})
时间处理
package models
import (
"fmt"
"time"
)
type LocalTime time.Time
func (t *LocalTime) MarshalJSON() ([]byte, error) {
tTime := time.Time(*t)
return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
}
type BaseModel struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt LocalTime `json:"created_at"`
UpdatedAt LocalTime `json:"updated_at"`
}
自定义表名
package models
import (
"github.com/google/uuid"
"gorm.io/gorm"
)
type User struct {
BaseModel
UUid string `json:"uuid" gorm:"unique"`
Name string `json:"name" `
Phone string `json:"phone" `
Password string `json:"password" `
MerId int64 `json:"mer_id"`
}
func (User) TableName() string {
return "user"
}
baseModdel
表操作
查询
添加
删除
一对一
一个用户对应一个订单表
package main
import (
"fmt"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Username string
Order Order `gorm:"foreignKey:Uid"`
}
type Order struct {
gorm.Model
Uid uint64
Price float64
}
var DB *gorm.DB
func Content() {
db, err := gorm.Open(sqlite.Open("database.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
DB = db
}
func main() {
Content()
DB.AutoMigrate(&User{})
DB.AutoMigrate(&Order{})
var user User
DB.Preload("Order").Find(&user, 1) // 用户表关联 订单表 查询
fmt.Println("user", user)
fmt.Println("order", user.Order)
}
一对多
一个用户对应多个订单
package main
import (
"fmt"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
// 主表
type User struct {
gorm.Model
Username string
Orders []Order `gorm:"foreignKey:Uid"` // 这里是一个分片
}
type Order struct {
gorm.Model
Uid uint64
Price float64
User User `gorm:"foreignKey:Uid"` // 指定当前表的外键即可
}
var DB *gorm.DB
func Content() {
db, err := gorm.Open(sqlite.Open("database.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
DB = db
}
func main() {
Content()
DB.AutoMigrate(&User{})
DB.AutoMigrate(&Order{})
var user User
DB.Preload("Orders").Find(&user, 1)
fmt.Println("users", user)
if len(user.Orders) > 0 {
for _, item := range user.Orders {
fmt.Println("order", item)
}
}
// 查询订单列表的时候携带创建订单的用户
}
func GetListWithUser(page, limit int) (orderList []models.Order) {
order := []models.Order{}
database.DB.Preload("User").Limit(limit).Offset(page).Order("id desc").Find(&order)
return order
}