LoadMysqlInfo.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package tmpl
  2. import (
  3. "fmt"
  4. "strings"
  5. "xorm.io/xorm"
  6. )
  7. type MTable struct {
  8. Name string //数据库表名
  9. GreatHump string //大驼峰名称
  10. LittleHump string //小驼峰
  11. Comment string //注释
  12. ExistId bool //是否存在id
  13. MColumns []MColumn //字段
  14. }
  15. type MColumn struct {
  16. Name string //数据库名称
  17. GreatHump string //大驼峰名称
  18. LittleHump string //小驼峰
  19. Comment string //注释
  20. SqlTypeName string //数据库类型
  21. TypeName string //go 类型
  22. VueTypeName string //vue对应类型
  23. Length int64 //长度
  24. Length2 int64 //小数点长度
  25. IsKey bool //主键
  26. }
  27. func (receiver MTable) String() string {
  28. return fmt.Sprintf("Name:%s,Comment:%s,MColumns:%s\n\n\n", receiver.Name, receiver.Comment, receiver.MColumns)
  29. }
  30. func (receiver MColumn) String() string {
  31. return fmt.Sprintf("Name:%s,AaBbName:%s,aaBbName:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n",
  32. receiver.Name, receiver.GreatHump, receiver.LittleHump, receiver.Comment, receiver.SqlTypeName, receiver.TypeName, receiver.Length, receiver.Length2)
  33. }
  34. var MTables = make([]MTable, 0)
  35. // InitMTableArray 初始化加载数据库结构并存储
  36. func InitMTableArray(engine *xorm.Engine) {
  37. if len(MTables) > 0 {
  38. return
  39. }
  40. metas, err := engine.DBMetas()
  41. if err != nil {
  42. fmt.Println(err)
  43. }
  44. for _, meta := range metas {
  45. var mTable MTable
  46. mTable.Name = meta.Name
  47. mTable.GreatHump, mTable.LittleHump = formatName(meta.Name)
  48. mTable.Comment = meta.Comment
  49. var cols = meta.Columns()
  50. for i := range cols {
  51. var mColumn MColumn
  52. mColumn.Name = cols[i].Name
  53. mColumn.GreatHump, mColumn.LittleHump = formatName(cols[i].Name)
  54. mColumn.IsKey = cols[i].IsPrimaryKey
  55. if cols[i].IsPrimaryKey && cols[i].IsAutoIncrement {
  56. mTable.ExistId = true
  57. }
  58. mColumn.Comment = cols[i].Comment
  59. mColumn.SqlTypeName = cols[i].SQLType.Name
  60. mColumn.TypeName = formatSqlType(mColumn.SqlTypeName)
  61. mColumn.VueTypeName = formatSqlToVueType(mColumn.SqlTypeName)
  62. mColumn.Length = cols[i].Length
  63. mColumn.Length2 = cols[i].Length2
  64. mTable.MColumns = append(mTable.MColumns, mColumn)
  65. }
  66. MTables = append(MTables, mTable)
  67. }
  68. }
  69. // 将名字修改成大驼峰和小驼峰的格式进行返回
  70. func formatName(name string) (string, string) {
  71. split := strings.Split(strings.ToLower(name), "_")
  72. if len(split) == 1 {
  73. return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0]
  74. } else {
  75. AaBb := ""
  76. aaBb := ""
  77. for j := range split {
  78. AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  79. if j == 0 {
  80. aaBb += split[j]
  81. } else {
  82. aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  83. }
  84. }
  85. return AaBb, aaBb
  86. }
  87. }
  88. func formatSqlToVueType(str string) string {
  89. str = strings.ToLower(str)
  90. switch str {
  91. case "varchar":
  92. return "string"
  93. case "int":
  94. return "number"
  95. case "decimal":
  96. return "number"
  97. case "datetime":
  98. return "string"
  99. case "longblob":
  100. return "string"
  101. default:
  102. panic("未定义的类型:" + str)
  103. }
  104. }
  105. func formatSqlType(str string) string {
  106. str = strings.ToLower(str)
  107. switch str {
  108. case "varchar":
  109. return "string"
  110. case "int":
  111. return "int64"
  112. case "decimal":
  113. return "float64"
  114. case "datetime":
  115. return "time.Time"
  116. case "longblob":
  117. return "string"
  118. default:
  119. panic("未定义的类型:" + str)
  120. }
  121. }