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" }