文章目录
通用结构体
type UserInfo struct {
ID int
Phone *string `gorm:"column:phone"`
Email *string
Address *string
ContactName *string `gorm:"column:contact_name"`
Age int
Lengths float32
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:datetime"`
}
func (*UserInfo) TableName() string {
return "user_info"
}
1、结构体创建
func TestCreateStruct(t *testing.T) {
formatInt := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst := "18888888888_" + formatInt
emailConst := "Richard@gmail.com_" + formatInt
addressConst := "Richard@gmail.com_" + formatInt
contactConst := "Richard_" + formatInt
userInfo := model.UserInfo{
Phone: &phoneConst,
Email: &emailConst,
Address: &addressConst,
ContactName: &contactConst,
Age: 10,
Lengths: 10.10,
}
var db = mysql.GormDB
tx := db.Create(&userInfo)
}
2、批量掺入数据-结构体切片
func TestCreateStructList(t *testing.T) {
formatInt := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst := "18888888888_" + formatInt
emailConst := "Richard@gmail.com_" + formatInt
addressConst := "Richard@gmail.com_" + formatInt
contactConst := "Richard_" + formatInt
userInfo1 := model.UserInfo{
Phone: &phoneConst,
Email: &emailConst,
Address: &addressConst,
ContactName: &contactConst,
Age: 1,
Lengths: 1,
}
formatInt2 := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst2 := "18888888888_" + formatInt2
emailConst2 := "Richard@gmail.com_" + formatInt2
addressConst2 := "Richard@gmail.com_" + formatInt2
contactConst2 := "Richard_" + formatInt2
userInfo2 := model.UserInfo{
Phone: &phoneConst2,
Email: &emailConst2,
Address: &addressConst2,
ContactName: &contactConst2,
Age: 2,
Lengths: 2,
}
userInfos := []*model.UserInfo{&userInfo1, &userInfo2}
var db = mysql.GormDB
db.Create(&userInfos)
}
3、根据map创建
func TestMapCreate(t *testing.T) {
var db = mysql.GormDB
db.Model(&model.UserInfo{}).Create(map[string]interface{}{
"Phone": "15112345678", "email": "183@qq.com", "ContactName": "xiaolihahaha", "address": "qwettrAddress",
})
}
4、根据map切片创建
func TestSliceMapCreate(t *testing.T) {
var db = mysql.GormDB
db.Model(&model.UserInfo{}).Create([]map[string]interface{}{
{"Phone": "15112345676", "email": "Richard@gmail.com_1689133314778", "ContactName": "xiaolihahaha", "address": "qwettrAddress"},
{"Phone": "15112345679", "email": "qwettr2@163.com", "ContactName": "xiaoli22"},
})
}
5、用指定的字段创建记录
func TestSelectCreate(t *testing.T) {
var db = mysql.GormDB
formatInt := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst := "18888888888_" + formatInt
emailConst := "Richard@gmail.com_" + formatInt
addressConst := "Richard@gmail.com_" + formatInt
contactConst := "Richard_" + formatInt
userInfo := model.UserInfo{
Phone: &phoneConst,
Email: &emailConst,
Address: &addressConst,
ContactName: &contactConst,
Age: 10,
Lengths: 10.10,
}
db.Select("Phone", "contact_name", "email").Create(&userInfo)
}
6、用指定忽略的字段创建记录
func TestOmitCreate(t *testing.T) {
var db = mysql.GormDB
formatInt := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst := "18888888888_" + formatInt
emailConst := "Richard@gmail.com_" + formatInt
addressConst := "Richard@gmail.com_" + formatInt
contactConst := "Richard_" + formatInt
userInfo := model.UserInfo{
Phone: &phoneConst,
Email: &emailConst,
Address: &addressConst,
ContactName: &contactConst,
Age: 10,
Lengths: 10.10,
}
db.Omit("Phone", "contact_name", "email").Create(&userInfo)
}
7、批量插入
func TestCreateInBatches(t *testing.T) {
var db = mysql.GormDB
phone := "15188888881"
phone1 := "15188888882"
phone2 := "15188888883"
userInfo := []model.UserInfo{{Phone: &phone}, {Phone: &phone1}, {Phone: &phone2}}
db.CreateInBatches(userInfo, 5)
}
8、跳过钩子
func TestSkipHooks(t *testing.T) {
var db = mysql.GormDB
formatInt := strconv.FormatInt(time.Now().UnixMilli(), 10)
phoneConst := "18888888888_" + formatInt
emailConst := "Richard@gmail.com_" + formatInt
addressConst := "Richard@gmail.com_" + formatInt
contactConst := "Richard_" + formatInt
userInfo := model.UserInfo{
Phone: &phoneConst,
Email: &emailConst,
Address: &addressConst,
ContactName: &contactConst,
Age: 10,
Lengths: 10.10,
}
db.Session(&gorm.Session{SkipHooks: true}).Create(&userInfo)
}
9、使用 SQL表达式、Context Valuer 创建记录
func TestClauseCreate(t *testing.T) {
var db = mysql.GormDB
db.Model(&model.UserInfo{}).Create(map[string]interface{}{
"Email": clause.Expr{SQL: "CONCAT(?)", Vars: []interface{}{"Email"}}, "Phone": "12333333",
"Address": clause.Expr{SQL: "CONCAT(?)", Vars: []interface{}{"sads"}},
})
}
10、关联创建
type User struct {
ID uint
Name string
Email *string `gorm:"default:Franklin@gmail.com"`
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
CreditCard CreditCard
}
func (User) TableName() string {
return "user"
}
type CreditCard struct {
gorm.Model
Number string
UserID uint
}
func (CreditCard) TableName() string {
return "credit_card"
}
func TestAssociationsCreate(t *testing.T) {
var db = mysql.GormDB
db.Create(&model.User{Name: "xiaoli", CreditCard: model.CreditCard{Number: "123456789"}})
}
11、关联创建-跳过关联关系-skip saving associations
// 结构体同上
// 关联创建-跳过关联关系-skip saving associations
func TestSkipAssociationsCreate(t *testing.T) {
var db = mysql.GormDB
email := "asdqwe@163.com"
user := model.User{
Name: "xiaoling",
Email: &email,
Age: 18,
}
//跳过CreditCard表关联
db.Omit("CreditCard").Create(&user)
//跳过所有关联
db.Omit(clause.Associations).Create(&user)
}
12、默认值
// 结构体同(9)
func TestDefaultValueCreate(t *testing.T) {
var db = mysql.GormDB
db.Create(&model.User{
Name: "xiaoli",
CreditCard: model.CreditCard{
Number: "123456789",
},
})
}