请教 gorm的Clause的使用方式 以及参数介绍

请教 gorm的Clause的使用方式 以及参数介绍
最近在做数据批量处理但是一旦数据量太大就会产生数据库连接池不够用或操作太快导致报错,后来发现Clause很适合 但是目前我使用 只能是没有这个数据才插入的操作

我还想理解 如果数据存在怎么更新
如何指定字段查询,有就更新,没有就插入

找了一些资料 根据唯一索引的操作

在id冲突的情况下 更新列

service.G.Clauses(clause.OnConflict{
		Columns:   []clause.Column{{Name: "id"}},
		DoUpdates: clause.AssignmentColumns([]string{"title", "content", "statu"}),
	}).Create(ac)
	

冲突的时候啥也不做,适合只插入

service.G.Clauses(clause.OnConflict{DoNothing: true}).Create(ac)

id冲突的时候更新指定的列为指定的值

service.G.Clauses(clause.OnConflict{
		Columns:   []clause.Column{{Name: "id"}},
		DoUpdates: clause.AssignmentColumns(map[string]interface{}{"statu":-1}),
	}).Create(ac)

在冲突时,更新除主键以外的所有列

service.G.Clauses(clause.OnConflict{UpdateAll: true}).Create(ac)

场景: 我遍历拿到gin生成的路由自动加入数据库

type s struct {
		UrlMode string `grom:"url_mode" json:"url_mode"`
		UrlPath string `grom:"url_path" json:"url_path"`
}

这个是数据

GET    /test/login      
GET    /test/sj         
POST   /admin/login     
POST   /admin/list      
GET    /admin/resources 
POST   /admin/resources

我想用grom的Clauses方式插入更新它
请问大佬们有知道的吗