diff --git a/scripts/generate_db_helpers.go b/scripts/generate_db_helpers.go
index 5746457e68bcec77f71b69f5eba624437b2d01ff_c2NyaXB0cy9nZW5lcmF0ZV9kYl9oZWxwZXJzLmdv..2defe6a5a126875beea9790225e82d2b802e01ab_c2NyaXB0cy9nZW5lcmF0ZV9kYl9oZWxwZXJzLmdv 100644
--- a/scripts/generate_db_helpers.go
+++ b/scripts/generate_db_helpers.go
@@ -275,6 +275,7 @@
 	PKeyColumn() string
 	Columns(withPKey bool) []string
 	Values(columns ...string) []interface{}
+	ValuesMap(columns ...string) map[string]interface{}
 }
 
 type TableSchema interface {
@@ -483,6 +484,20 @@
 	return values
 }
 
+// ValuesMap returns the values map for a list of columns. If a column does not
+// exits, the corresponding value is left empty
+func (s {{.Name}}) ValuesMap(columns ...string) map[string]interface{} {
+	values := make(map[string]interface{})
+	for _, column := range columns {
+		switch column {
+		{{- range .Fields}}
+		case "{{.Column}}":
+			values["{{.Column}}"] = s.{{.Name}}
+		{{- end}}
+		}
+	}
+	return values
+}
 {{- if .HasTable}}
 
 func New{{.Name}}TableSchema() *{{.Name}}TableSchema {
diff --git a/server.yaml b/server.yaml
index 5746457e68bcec77f71b69f5eba624437b2d01ff_c2VydmVyLnlhbWw=..2defe6a5a126875beea9790225e82d2b802e01ab_c2VydmVyLnlhbWw= 100644
--- a/server.yaml
+++ b/server.yaml
@@ -95,6 +95,11 @@
       source: asset:serverOperation
       target: "{{ if gt (len .Tags) 0 }}{{ joinFilePath .Target .ServerPackage .APIPackage .Package  }}{{ else }}{{ joinFilePath .Target .ServerPackage .Package  }}{{ end }}"
       file_name: "{{ (snakize (pascalize .Name)) }}.go"
+    - name: urlbuilder
+      source: "asset:serverUrlbuilder"
+      target: "{{ if .UseTags }}{{ joinFilePath .Target (toPackagePath .ServerPackage) (toPackagePath .APIPackage) (toPackagePath .Package) }}{{ else }}{{ joinFilePath .Target (toPackagePath .ServerPackage) (toPackagePath .Package) }}{{ end }}"
+      file_name: "{{ (snakize (pascalize .Name)) }}_urlbuilder.go"
+
 
     # custom templates
     - name: prometheus