阅读 7457

gorm mysql JSON 使用

gorm 实现 mysql 的 json 类型,文档上没有给出明确的案例。 通过 issues 得知,只要为 struct 实现 ValueScan 方法就可以作为 json 格式存储在 mysql 中。

定义 model

// User 用户
type User struct {
	gorm.Model
  Name string `gorm:"comment:'用户名'"`
	Profile Profile `gorm:"type:json;comment:'个人信息'"`
}

// Profile 个人信息
type Profile struct {
	Email string `json:"email"`
	PhoneNo string `json:"phoneNo"`
}

// Value 实现方法
func (p Profile) Value() (driver.Value, error) {
	return json.Marshal(p
}

// Scan 实现方法
func (p Profile) Scan(input interface{}) error {
	return json.Unmarshal(input.([]byte), p)
}
复制代码

新增&编辑

db, err := gorm.Open(/* open mysql ... */)
u := User{
	Name: "Clancey",
	Profile: Profile{
		Email: "ClanceyLu@gmail.com",
		PhoneNo: "18888888888",
	},
}

db.Save(&u)

u.Profile.PhoneNo = "13666666666"
db.Save(&u)
// or
db.Where("id = ?", u.ID).
	Updates(&u)
复制代码

查找

var u User
db.
	Where("profile->'$.email' = (?)", "ClanceyLu@gmail.com").
	First(&u)
复制代码
文章分类
后端
文章标签