gorm2.0版本以下不支持批量插入,那么咋只好造个轮子
利用反射机制获取数据集的类型和字段,合生批量插入的sql,最终利用exec语句执行。
具体代码如下(有很大的优化空间):
// BatchCreate 批量插入
func BatchCreate(db *gorm.DB, data interface{
}) error {
getValue := reflect.ValueOf(data)
if getValue.Kind() != reflect.Slice {
return errors.New("数据类型不支持")
}
l := getValue.Len()
if l == 0 {
return nil
}
firstValue := getValue.Index(0)
fieldNum := firstValue.NumField()
tableName := getTableName(firstValue.Type().Name())
const CreatedAt = "CreatedAt" //创建时间的结构体字段名
const UpdatedAt = "UpdatedAt" //更新时间的结构体字段名
const CreatedAtField = "created_at" //创建时间的数据库字段名
const UpdatedAtField = "updated_at" //更新时间的数据库字段名
//获取字段名称
var fields []string
for i := 0; i < fieldNum; i++ {
if firstValue.Field(i).Type().String() == "gorm.Model" {
gormValue := reflect.ValueOf(firstValue.Field(i).Interface())
for j := 0; j < gormValue.NumField(); j++ {
if gormValue.Type().Field(j).Name == CreatedAt {
fields = append(fields, CreatedAtField)
} else if gormValue.Type().Field

该代码示例展示了在GORM2.0版本以下不支持批量插入时,如何通过反射机制动态构建SQL进行批量数据插入。函数`BatchCreate`接收一个数据接口,检查数据类型,获取字段信息,生成并执行批量插入的SQL语句,特别处理了时间字段和`gorm.Model`中的`CreatedAt`和`UpdatedAt`字段。
最低0.47元/天 解锁文章
1841

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



