MysqlBaseData.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. AaBbName string
  12. aaBbName string
  13. Comment string
  14. existId bool
  15. MColumns []MColumn
  16. }
  17. type MColumn struct {
  18. Name string //aa_bb
  19. AaBbName string
  20. aaBbName 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,AaBbName:%s,aaBbName:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n",
  34. receiver.Name, receiver.AaBbName, receiver.aaBbName, 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.AaBbName, mTable.aaBbName = 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.AaBbName, mColumn.aaBbName = 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. fmt.Println(mTable)
  70. }
  71. }
  72. // 将名字修改成大驼峰和小驼峰的格式进行返回
  73. func formatName(name string) (string, string) {
  74. split := strings.Split(strings.ToLower(name), "_")
  75. if len(split) == 1 {
  76. return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0]
  77. } else {
  78. AaBb := ""
  79. aaBb := ""
  80. for j := range split {
  81. AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  82. if j == 0 {
  83. aaBb += split[j]
  84. } else {
  85. aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
  86. }
  87. }
  88. return AaBb, aaBb
  89. }
  90. }
  91. func WriteFile(fileUrl, content string) {
  92. os.Truncate(fileUrl, 0)
  93. file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
  94. defer file.Close()
  95. writer := bufio.NewWriter(file)
  96. writer.WriteString(content)
  97. writer.Flush()
  98. }