序
本文主要研究一下gorm的CreateInBatches
CreateInBatches
gorm.io/gorm@v1.20.11/finisher_api.go
// CreateInBatches insert the value in batches into database
func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) {
reflectValue := reflect.Indirect(reflect.ValueOf(value))
switch reflectValue.Kind() {
case reflect.Slice, reflect.Array:
var rowsAffected int64
tx = db.getInstance()
tx.AddError(tx.Transaction(func(tx *DB) error {
for i := 0; i < reflectValue.Len(); i += batchSize {
ends := i + batchSize
if ends > reflectValue.Len() {
ends = reflectValue.Len()
}
subtx := tx.getInstance()
subtx.Statement.Dest = reflectValue.Slice(i, ends).Interface()
subtx.callbacks.Create().Execute(subtx)
if subtx.Error != nil {
return subtx.Error
}
rowsAffected += subtx.RowsAffected
}
return nil
}))
tx.RowsAffected = rowsAffected
defau

本文解析了gorm库中的CreateInBatches函数,如何实现按batchSize分批插入数据并保持事务一致性,以及AddError和CommitOrRollbackTransaction的作用。实例演示了如何使用CreateInBatches进行数据库操作和错误处理。
最低0.47元/天 解锁文章
2078

被折叠的 条评论
为什么被折叠?



