93 lines
2.1 KiB
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"
|
|
}
|