|
|
@@ -10,7 +10,7 @@ import (
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
-type OnParsedFieldTagFunc func(entityFieldElemValue reflect.Value, tag *SqlMappingTag) error
|
|
|
+type OnParsedFieldTagFunc func(fieldName string, entityFieldElemValue reflect.Value, tag *SqlMappingTag) error
|
|
|
|
|
|
func BuildExecuteParams(e any, onParsedFieldTagFunc OnParsedFieldTagFunc) error {
|
|
|
if e == nil {
|
|
|
@@ -24,7 +24,9 @@ func BuildExecuteParams(e any, onParsedFieldTagFunc OnParsedFieldTagFunc) error
|
|
|
return fserr.New("参数不是结构或结构指针")
|
|
|
}
|
|
|
|
|
|
- err := parseEntitySqlMappingTag(reflectutils.PointerValueElem(entityValue), onParsedFieldTagFunc)
|
|
|
+ entityElemValue := reflectutils.PointerValueElem(entityValue)
|
|
|
+
|
|
|
+ err := parseEntitySqlMappingTag(entityElemValue, onParsedFieldTagFunc)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -38,10 +40,14 @@ func parseEntitySqlMappingTag(entityElemValue reflect.Value, onParsedFieldTagFun
|
|
|
entityFieldValue := entityElemValue.Field(i)
|
|
|
|
|
|
// 无效零值,不进行映射
|
|
|
- if !entityFieldValue.IsValid() || entityFieldValue.IsZero() {
|
|
|
+ if !entityFieldValue.IsValid() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
+ if entityFieldValue.Kind() == reflect.Pointer && entityFieldValue.IsNil() {
|
|
|
+ entityFieldValue.Set(reflect.New(entityField.Type.Elem()))
|
|
|
+ }
|
|
|
+
|
|
|
entityFieldElemValue := reflectutils.PointerValueElem(entityFieldValue)
|
|
|
|
|
|
tagStr := entityField.Tag.Get(sqlMappingTagKey)
|
|
|
@@ -62,9 +68,11 @@ func parseEntitySqlMappingTag(entityElemValue reflect.Value, onParsedFieldTagFun
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+ continue
|
|
|
}
|
|
|
|
|
|
- err = onParsedFieldTagFunc(entityFieldElemValue, tag)
|
|
|
+ err = onParsedFieldTagFunc(entityField.Name, entityFieldElemValue, tag)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -137,8 +145,7 @@ func parseSqlMappingTag(field reflect.StructField, tagStr string) (*SqlMappingTa
|
|
|
for _, sqlMappingPart := range sqlMappingParts {
|
|
|
sqlMappingPartKeyValue := strings.SplitN(strings.TrimSpace(sqlMappingPart), sqlMappingTagPartKeyValueSeparator, 2)
|
|
|
if sqlMappingPartKeyValue != nil && len(sqlMappingPartKeyValue) == 2 && strutils.IsStringNotEmpty(sqlMappingPartKeyValue[1]) {
|
|
|
- // 可以支持' ' ',获取到'字符
|
|
|
- sqlMappingPartKeyValue[1] = strings.TrimSpace(strings.Trim(sqlMappingPartKeyValue[1], "'"))
|
|
|
+ sqlMappingPartKeyValue[1] = strings.Trim(sqlMappingPartKeyValue[1], "'")
|
|
|
}
|
|
|
|
|
|
switch sqlMappingPartKeyValue[0] {
|