官网gorm写法示例之insert


通用结构体

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",
		},
	})
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

克里斯蒂亚诺·罗纳尔达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值