Administrator пре 2 година
родитељ
комит
7d3ad5b9ea
3 измењених фајлова са 162 додато и 30 уклоњено
  1. 132 0
      tmpl/LoadMysqlInfo.go
  2. 25 25
      tmpl/dao.go.template
  3. 5 5
      tmpl/struct.go.template

+ 132 - 0
tmpl/LoadMysqlInfo.go

@@ -0,0 +1,132 @@
+package tmpl
+
+import (
+	"fmt"
+	"strings"
+	"xorm.io/xorm"
+)
+
+type MTable struct {
+	Name       string    //数据库表名
+	GreatHump  string    //大驼峰名称
+	LittleHump string    //小驼峰
+	Comment    string    //注释
+	ExistId    bool      //是否存在id
+	MColumns   []MColumn //字段
+}
+
+type MColumn struct {
+	Name        string //数据库名称
+	GreatHump   string //大驼峰名称
+	LittleHump  string //小驼峰
+	Comment     string //注释
+	SqlTypeName string //数据库类型
+	TypeName    string //go 类型
+	VueTypeName string //vue对应类型
+	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,AaBbName:%s,aaBbName:%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)
+	}
+}
+
+// 将名字修改成大驼峰和小驼峰的格式进行返回
+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 formatSqlToVueType(str string) string {
+	str = strings.ToLower(str)
+	switch str {
+	case "varchar":
+		return "string"
+	case "int":
+		return "number"
+	case "decimal":
+		return "number"
+	case "datetime":
+		return "string"
+	case "longblob":
+		return "string"
+	default:
+		panic("未定义的类型:" + str)
+	}
+}
+func formatSqlType(str string) string {
+	str = strings.ToLower(str)
+	switch str {
+	case "varchar":
+		return "string"
+	case "int":
+		return "int64"
+	case "decimal":
+		return "float64"
+	case "datetime":
+		return "time.Time"
+	case "longblob":
+		return "string"
+	default:
+		panic("未定义的类型:" + str)
+	}
+}

+ 25 - 25
tmpl/dao.go.template

@@ -6,32 +6,32 @@ import (
 	"demo/data/domain/vo"
 )
 {{range .}}
-func Get{{.AaBbName}}ById(id int64) (domain.{{.AaBbName}}, error) {
-	var {{.aaBbName}} domain.{{.AaBbName}}
-	_, err := configs.Engine.Where("id = ?", id).Get(&{{.aaBbName}})
+func Get{{.GreatHump}}ById(id int64) (domain.{{.GreatHump}}, error) {
+	var {{.LittleHump}} domain.{{.GreatHump}}
+	_, err := configs.Engine.Where("id = ?", id).Get(&{{.LittleHump}})
 	if err != nil {
-		return {{.aaBbName}}, err
+		return {{.LittleHump}}, err
 	}
-	return {{.aaBbName}}, nil
+	return {{.LittleHump}}, nil
 }
 
-func Get{{.AaBbName}}ListInId(ids []int64) ([]domain.{{.AaBbName}}, error) {
-	rows, err := configs.Engine.In("id", ids).Rows(&domain.{{.AaBbName}}{})
+func Get{{.GreatHump}}ListInId(ids []int64) ([]domain.{{.GreatHump}}, error) {
+	rows, err := configs.Engine.In("id", ids).Rows(&domain.{{.GreatHump}}{})
 	if err != nil {
-		return make([]domain.{{.AaBbName}}, 0), err
+		return make([]domain.{{.GreatHump}}, 0), err
 	}
 	defer rows.Close()
-	var list []domain.{{.AaBbName}}
+	var list []domain.{{.GreatHump}}
 	for rows.Next() {
-		var u domain.{{.AaBbName}}
+		var u domain.{{.GreatHump}}
 		list = append(list, u)
 	}
 	return list, nil
 }
 
-func Get{{.AaBbName}}List({{.aaBbName}} domain.{{.AaBbName}}, pageNum, pageSize int) (vo.BaseListVo, error) {
-	var arr []domain.{{.AaBbName}}
-	Count, err := configs.Engine.Limit(pageSize, (pageNum-1)*pageSize).Desc("id").FindAndCount(&arr, &{{.aaBbName}})
+func Get{{.GreatHump}}List({{.LittleHump}} domain.{{.GreatHump}}, pageNum, pageSize int) (vo.BaseListVo, error) {
+	var arr []domain.{{.GreatHump}}
+	Count, err := configs.Engine.Limit(pageSize, (pageNum-1)*pageSize).Desc("id").FindAndCount(&arr, &{{.LittleHump}})
 	var vo vo.BaseListVo
 	if err != nil {
 		return vo, err
@@ -49,26 +49,26 @@ func Get{{.AaBbName}}List({{.aaBbName}} domain.{{.AaBbName}}, pageNum, pageSize
 	return vo, nil
 }
 
-func Save{{.AaBbName}}({{.aaBbName}} *domain.{{.AaBbName}}) (domain.{{.AaBbName}}, error) {
-	_, err := configs.Engine.Insert(&{{.aaBbName}})
+func Save{{.GreatHump}}({{.LittleHump}} *domain.{{.GreatHump}}) (domain.{{.GreatHump}}, error) {
+	_, err := configs.Engine.Insert(&{{.LittleHump}})
 	if err != nil {
-		return *{{.aaBbName}}, err
+		return *{{.LittleHump}}, err
 	}
-	return *{{.aaBbName}}, nil
+	return *{{.LittleHump}}, nil
 }
 
-func Set{{.AaBbName}}({{.aaBbName}}Map map[string]interface{}, id int64) (domain.{{.AaBbName}}, bool, error) {
-	var {{.aaBbName}} domain.{{.AaBbName}}
-	_, err := configs.Engine.Table("{{.aaBbName}}").Where("id = ?", id).Update({{.aaBbName}}Map)
+func Set{{.GreatHump}}({{.LittleHump}}Map map[string]interface{}, id int64) (domain.{{.GreatHump}}, bool, error) {
+	var {{.LittleHump}} domain.{{.GreatHump}}
+	_, err := configs.Engine.Table("{{.LittleHump}}").Where("id = ?", id).Update({{.LittleHump}}Map)
 	if err != nil {
-		return {{.aaBbName}}, false, err
+		return {{.LittleHump}}, false, err
 	}
-	return {{.aaBbName}}, true, nil
+	return {{.LittleHump}}, true, nil
 }
 
-func Delete{{.AaBbName}}(id int64) bool {
-	var {{.aaBbName}} domain.{{.AaBbName}}
-	i, err := configs.Engine.Where("id = ?", id).Delete(&{{.aaBbName}})
+func Delete{{.GreatHump}}(id int64) bool {
+	var {{.LittleHump}} domain.{{.GreatHump}}
+	i, err := configs.Engine.Where("id = ?", id).Delete(&{{.LittleHump}})
 	if err != nil {
 		return false
 	}

+ 5 - 5
tmpl/struct.go.template

@@ -5,13 +5,13 @@ import (
     "time"
 )
 {{range .}}
-// {{.AaBbName}} {{.Comment}}
-type {{.AaBbName}} struct {
-{{range .MColumns}}    {{.AaBbName}} {{.TypeName}} `{{if eq .IsKey false}}xorm:"{{.Name}}"{{end}} json:"{{.AaBbName}}"`
+// {{.GreatHump}} {{.Comment}}
+type {{.GreatHump}} struct {
+{{range .MColumns}}    {{.GreatHump}} {{.TypeName}} `{{if .IsKey}} {{else}}xorm:"{{.Name}}"{{end}} json:"{{.GreatHump}}"`
 {{end}}}
 
-func (receiver {{.AaBbName}}) String() string {
-	return fmt.Sprint("{{.AaBbName}}{", {{range .MColumns}}"{{.AaBbName}}:", receiver.{{.AaBbName}},{{end}} "}")
+func (receiver {{.GreatHump}}) String() string {
+	return fmt.Sprint("{{.GreatHump}}{", {{range .MColumns}}"{{.GreatHump}}:", receiver.{{.GreatHump}},{{end}} "}")
 }
 
 {{end}}