gorm无法批量插入解决办法(已实践)

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

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

end for time

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

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

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

打赏作者

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

抵扣说明:

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

余额充值