package util import ( "bufio" "fmt" "os" "strings" "xorm.io/xorm" ) type MTable struct { Name string GreatHump string LittleHump string Comment string ExistId bool MColumns []MColumn } type MColumn struct { Name string GreatHump string LittleHump string Comment string SqlTypeName string TypeName string VueTypeName string Length int64 Length2 int64 IsKey bool } func (receiver MTable) String() string { return fmt.Sprintf("Name:%s,Comment:%s,MColumns:%s\n\n\n", receiver.Name, receiver.Comment, receiver.MColumns) } func (receiver MColumn) String() string { return fmt.Sprintf("Name:%s,GreatHump:%s,LittleHump:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n", receiver.Name, receiver.GreatHump, receiver.LittleHump, receiver.Comment, receiver.SqlTypeName, receiver.TypeName, receiver.Length, receiver.Length2) } var MTables = make([]MTable, 0) // InitMTableArray 初始化加载数据库结构并存储 func InitMTableArray(engine *xorm.Engine) { if len(MTables) > 0 { return } metas, err := engine.DBMetas() if err != nil { fmt.Println(err) } for _, meta := range metas { var mTable MTable mTable.Name = meta.Name mTable.GreatHump, mTable.LittleHump = FormatName(meta.Name) mTable.Comment = meta.Comment var cols = meta.Columns() for i := range cols { var mColumn MColumn mColumn.Name = cols[i].Name mColumn.GreatHump, mColumn.LittleHump = FormatName(cols[i].Name) mColumn.IsKey = cols[i].IsPrimaryKey if cols[i].IsPrimaryKey && cols[i].IsAutoIncrement { mTable.ExistId = true } mColumn.Comment = cols[i].Comment mColumn.SqlTypeName = cols[i].SQLType.Name mColumn.TypeName = FormatSqlType(mColumn.SqlTypeName) mColumn.VueTypeName = formatSqlToVueType(mColumn.SqlTypeName) mColumn.Length = cols[i].Length mColumn.Length2 = cols[i].Length2 mTable.MColumns = append(mTable.MColumns, mColumn) } MTables = append(MTables, mTable) } } // FormatName 将名字修改成大驼峰和小驼峰的格式进行返回 func FormatName(name string) (string, string) { split := strings.Split(strings.ToLower(name), "_") if len(split) == 1 { return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0] } else { AaBb := "" aaBb := "" for j := range split { AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:] if j == 0 { aaBb += split[j] } else { aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:] } } return AaBb, aaBb } } func WriteFile(fileUrl, content string) { os.Truncate(fileUrl, 0) file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666) defer file.Close() writer := bufio.NewWriter(file) writer.WriteString(content) writer.Flush() }