MysqlBaseData.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package util
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. "strings"
  7. "xorm.io/xorm"
  8. )
  9. type MTable struct {
  10. Name string
  11. GreatHump string
  12. LittleHump string
  13. Comment string
  14. ExistId bool
  15. MColumns []MColumn
  16. }
  17. type MColumn struct {
  18. Name string
  19. GreatHump string
  20. LittleHump string
  21. Comment string
  22. SqlTypeName string
  23. TypeName string
  24. VueTypeName string
  25. Length int64
  26. Length2 int64
  27. IsKey bool
  28. }
  29. func (receiver MTable) String() string {
  30. return fmt.Sprintf("Name:%s,Comment:%s,MColumns:%s\n\n\n", receiver.Name, receiver.Comment, receiver.MColumns)
  31. }
  32. func (receiver MColumn) String() string {
  33. return fmt.Sprintf("Name:%s,GreatHump:%s,LittleHump:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n",
  34. receiver.Name, receiver.GreatHump, receiver.LittleHump, receiver.Comment, receiver.SqlTypeName, receiver.TypeName, receiver.Length, receiver.Length2)
  35. }
  36. var MTables = make([]MTable, 0)
  37. // InitMTableArray 初始化加载数据库结构并存储
  38. func InitMTableArray(engine *xorm.Engine) {
  39. if len(MTables) > 0 {
  40. return
  41. }
  42. metas, err := engine.DBMetas()
  43. if err != nil {
  44. fmt.Println(err)
  45. }
  46. for _, meta := range metas {
  47. var mTable MTable
  48. mTable.Name = meta.Name
  49. mTable.GreatHump, mTable.LittleHump = formatName(meta.Name)
  50. mTable.Comment = meta.Comment
  51. var cols = meta.Columns()
  52. for i := range cols {
  53. var mColumn MColumn
  54. mColumn.Name = cols[i].Name
  55. mColumn.GreatHump, mColumn.LittleHump = formatName(cols[i].Name)
  56. mColumn.IsKey = cols[i].IsPrimaryKey
  57. if cols[i].IsPrimaryKey && cols[i].IsAutoIncrement {
  58. mTable.ExistId = true
  59. }
  60. mColumn.Comment = cols[i].Comment
  61. mColumn.SqlTypeName = cols[i].SQLType.Name
  62. mColumn.TypeName = FormatSqlType(mColumn.SqlTypeName)
  63. mColumn.VueTypeName = formatSqlToVueType(mColumn.SqlTypeName)
  64. mColumn.Length = cols[i].Length
  65. mColumn.Length2 = cols[i].Length2
  66. mTable.MColumns = append(mTable.MColumns, mColumn)
  67. }
  68. MTables = append(MTables, mTable)
  69. }
  70. }
  71. // 将名字修改成大驼峰和小驼峰的格式进行返回
  72. func formatName(name string) (string, string) {
  73. split := strings.Split(strings.ToLower(name), "_")
  74. if len(split) == 1 {
  75. return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0]
  76. } else {
  77. AaBb := ""
  78. aaBb := ""
  79. for j := range split {
  80. AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  81. if j == 0 {
  82. aaBb += split[j]
  83. } else {
  84. aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  85. }
  86. }
  87. return AaBb, aaBb
  88. }
  89. }
  90. func WriteFile(fileUrl, content string) {
  91. os.Truncate(fileUrl, 0)
  92. file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
  93. defer file.Close()
  94. writer := bufio.NewWriter(file)
  95. writer.WriteString(content)
  96. writer.Flush()
  97. }