gorm如何批量插入数据

博主没有找到gorm直接批量插入数据的方法,通过间接的方式实现了需求,有更好的办法欢迎指教。

批量插入示例代码:

// BatchSave 批量插入数据
func BatchSave(db *gorm.DB, emps []*CardInviteLogs) error {
   var buffer bytes.Buffer
   sql := "insert into `card_invite_logs` (`userid`,`invite_userid`,`has_chance`,`is_sign`) values"
   if _, err := buffer.WriteString(sql); err != nil {
      return err
   }
   for i, e := range emps {
      if i == len(emps)-1 {
         buffer.WriteString(fmt.Sprintf("('%d','%d',%d,%d);", e.Userid, e.InviteUserid, e.HasChance, e.IsSign))
      } else {
         buffer.WriteString(fmt.Sprintf("('%d','%d',%d,%d),", e.Userid, e.InviteUserid, e.HasChance, e.IsSign))
      }
   }
   return db.Exec(buffer.String()).Error
}

调用示例代码:

func xxx(ID interface{}) bool {
		.
		.
		.
      inviteLogsArr := make([]*CardInviteLogs, 3, 3)
      inviteLogsArr = []*CardInviteLogs{
         &CardInviteLogs{
            Userid:       ID.(uint),
            InviteUserid: 0,
            HasChance:    1,
            IsSign:       0,
         },
         &CardInviteLogs{
            Userid:       ID.(uint),
            InviteUserid: 0,
            HasChance:    1,
            IsSign:       0,
         },
         &CardInviteLogs{
            Userid:       ID.(uint),
            InviteUserid: 0,
            HasChance:    1,
            IsSign:       0,
         },
      }
      err := BatchSave(DB, inviteLogsArr)
		.
		.
		.
}

你可能感兴趣的:(go,gorm,golang)