demo
This commit is contained in:
parent
a73f5af4b4
commit
39e05c84b0
|
|
@ -0,0 +1,14 @@
|
|||
module mysql_gorm_json
|
||||
|
||||
go 1.21.1
|
||||
|
||||
require (
|
||||
gorm.io/driver/mysql v1.5.2
|
||||
gorm.io/gorm v1.25.5
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
)
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
|
||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
|
||||
gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
|
||||
gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
|
||||
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
|
||||
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
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"
|
||||
}
|
||||
Loading…
Reference in New Issue