mysql-gorm-json/main.go

93 lines
2.1 KiB
Go

package main
import (
"database/sql/driver"
"encoding/json"
"fmt"
"log"
"os"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
func main() {
dsn := "root:123456@tcp(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{ // table name prefix, table for `User` would be `t_users`
SingularTable: true, // use singular table name, table for `User` would be `user` with this option enabled
},
Logger: logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
Colorful: true,
LogLevel: logger.LogLevel(4), // Log level
},
),
})
//
db.AutoMigrate(&UserEntity{})
//u := UserEntity{
// Name: "张三3",
// Profile: Profile{
// Email: "233@qq.com",
// Mobile: "120",
// },
//}
//db.Create(&u)
var user UserEntity
db.Debug().Where("class->'$.name' like (?)", "%zhang%").First(&user)
fmt.Println("用户", user)
//user.Profile.Status = "请假中"
//user.Class.Number = 1
//user.Class.Name = "zhangsan"
//db.Updates(&user)
}
type Profile struct {
Email string `json:"email"`
Mobile string `json:"mobile"`
Status string `json:"status"`
}
type UserEntity struct {
gorm.Model
Name string `json:"name"`
Profile Profile `json:"profile" gorm:"type:json;comment:'个人信息'"`
Class Class `gorm:"column:class;type:json;comment:class" json:"class"`
}
type Class struct {
Name string `json:"name"`
Number int `json:"number"`
}
// Value 存储数据的时候转换为字符串
func (t Class) Value() (driver.Value, error) {
return json.Marshal(t)
}
// Scan 读取数据的时候转换为json
func (t *Class) Scan(value interface{}) error {
return json.Unmarshal(value.([]byte), &t)
}
// Value 存储数据的时候转换为字符串
func (t Profile) Value() (driver.Value, error) {
return json.Marshal(t)
}
// Scan 读取数据的时候转换为json
func (t *Profile) Scan(value interface{}) error {
return json.Unmarshal(value.([]byte), &t)
}
func (t *UserEntity) TableName() string {
return "user"
}