使用gorm框架插入数据的时候,官方没有现成的批量插入方法,可通过自己拼接sql语句,执行原生sql来实现
实现代码
func (c *SalesDay)BatchSave(dataSlice []interface{}) (interface{}, error) {
var buffer bytes.Buffer
createTime := time.Now()
sql := fmt.Sprintf("insert into `%s` (`book_id`,`date`,`create_time`,`update_time`) values", c.TableName())
if _, err := buffer.WriteString(sql); err != nil {
return "", err
}
for i, e := range dataSlice {
info := e.(map[string]interface{})
if i == len(dataSlice)-1 {
buffer.WriteString(fmt.Sprintf(`("%s","%s",""%s","%s");`,
info["bookId"], info["statDate"], createTime, createTime))
} else {
buffer.WriteString(fmt.Sprintf(`("%s","%s","%s","%s"),`,
info["bookId"], info["statDate"], createTime, createTime))
}
}
ctx := context.Background()
mysql := db.Single.Mysql(c.client).WithContext(ctx, zymysql.Master()).Exec(buffer.String())
fmt.Println(mysql.Error)
if mysql.Error != nil {
return "", mysql.Error
}
return "", nil
}
