gorm 批量插入數據


使用gorm 插入數據的時候,根據官方文檔可以使用Create或者FirstOrCreate(). 但是官方沒有提供批量插入數據的方法.

根據githubissue得知,我們可以通過自己拼接sql語句進行批量數據插入(或許這是官方提供方法之前最好的解決方案了)具體實現如下:

假設有如下數據庫表結構:

CREATE TABLE `employees` (
    `id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
    `name` varchar(64) NOT NULL COMMENT '雇員姓名',
    `age` TINYINT(5) NOT NULL COMMENT '雇員年齡',
    `addr` varchar(64) NOT NULL COMMENT '雇員家庭地址',
     PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='雇員信息表';

批量操作如下:

// Employee ...
type Employee struct {
	Name string `gorm:"column:name"`
	Age  int    `gorm:"column:age"`
	Addr string `gorm:"column:addr"`
}

// BatchSave 批量插入數據
func BatchSave(db *gorm.DB, emps []*Employee) error {
	var buffer bytes.Buffer
	sql := "insert into `employees` (`name`,`age`,`addr`) values"
	if _, err := buffer.WriteString(sql); err != nil {
		return err
	}
	for i, e := range emps {
		if i == len(emps)-1 {
			buffer.WriteString(fmt.Sprintf("('%s','%d',%s);", e.Name, e.Age, e.Addr))
		} else {
			buffer.WriteString(fmt.Sprintf("('%s','%d',%s),", e.Name, e.Age, e.Addr))
		}
	}
	return db.Exec(buffer.String()).Error
}

后續考慮分裝一下BatchCreate方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM