Bladeren bron

严谨逻辑

yjp 11 maanden geleden
bovenliggende
commit
0572bf85b6
3 gewijzigde bestanden met toevoegingen van 73 en 1 verwijderingen
  1. 27 0
      demo/entity.go
  2. 40 0
      demo/sql_mapping.go
  3. 6 1
      sql/sql_mapping.go

+ 27 - 0
demo/entity.go

@@ -0,0 +1,27 @@
+package main
+
+import "time"
+
+type IDField struct {
+	ID string
+}
+
+type TimeFields struct {
+	CreatedTime     *time.Time
+	LastUpdatedTime time.Time
+}
+
+type GraduatedTimeTestField struct {
+	GraduatedTimeTest *string `sqlmapping:"-" sqlresult:"column:graduated_time;parseTime:2006-01-02 15:04:05"`
+}
+
+type Class struct {
+	IDField
+	Name          string `sqlmapping:"updateClear;aes:@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L;" sqlresult:"aes:@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L;"`
+	StudentNum    int    `sqlmapping:"column:student_num;notUpdate;updateClear;" sqlresult:"column:student_num_alias"`
+	GraduatedTime *time.Time
+	StudentIDs    []string `sqlmapping:"column:student_ids;joinWith:'\n'" sqlresult:"column:student_ids;splitWith:'\n'"`
+	TimeFields
+	Ignored string `sqlmapping:"-" sqlresult:"-"`
+	*GraduatedTimeTestField
+}

+ 40 - 0
demo/sql_mapping.go

@@ -0,0 +1,40 @@
+package main
+
+import (
+	"fmt"
+	"git.sxidc.com/service-supports/ds-sdk/sql"
+)
+
+func main() {
+	printSqlMapping(&Class{})
+}
+
+func printSqlMapping(entity any) {
+	sqlMapping, err := sql.ParseSqlMappingTag(entity)
+	if err != nil {
+		panic(err)
+	}
+
+	for fieldName, element := range sqlMapping.MappingElement {
+		fmt.Println("---------------------------------------")
+		fmt.Println("Field Name: " + fieldName)
+
+		switch sqlColumn := element.(type) {
+		case *sql.MappingStruct:
+			fmt.Println("Type: Struct")
+			printSqlMapping(sqlColumn.FieldValueElem.Interface())
+		case *sql.MappingColumn:
+			fmt.Println("Type: Field")
+			fmt.Printf("Name: %s\n", sqlColumn.Name)
+			fmt.Printf("IsKey: %v\n", sqlColumn.IsKey)
+			fmt.Printf("CanUpdate: %v\n", sqlColumn.CanUpdate)
+			fmt.Printf("CanUpdateClear: %v\n", sqlColumn.CanUpdateClear)
+			fmt.Printf("AESKey: %v\n", sqlColumn.AESKey)
+			fmt.Printf("JoinWith: %v\n", sqlColumn.JoinWith)
+		default:
+			fmt.Println("类型错误")
+		}
+
+		fmt.Println("---------------------------------------")
+	}
+}

+ 6 - 1
sql/sql_mapping.go

@@ -174,8 +174,13 @@ func parseSqlMappingElement(field reflect.StructField, fieldValue reflect.Value)
 				sqlColumn.CanUpdate = false
 			case sqlMappingNotUpdate:
 				sqlColumn.CanUpdate = false
+				sqlColumn.CanUpdateClear = false
 			case sqlMappingUpdateClear:
-				sqlColumn.CanUpdateClear = true
+				if !sqlColumn.CanUpdate {
+					sqlColumn.CanUpdateClear = false
+				} else {
+					sqlColumn.CanUpdateClear = true
+				}
 			case sqlMappingAes:
 				if len(sqlPartKeyValue[1]) != 32 {
 					return nil, errors.New("AES密钥长度应该为32个字节")