| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package tmpl
- import (
- "bufio"
- "fmt"
- "os"
- "strings"
- "text/template"
- "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 //主键
- }
- // LoadStructTemplate 加载结构体生成模板
- func LoadStructTemplate(url string) {
- os.Truncate(url, 0)
- file, _ := os.OpenFile(url, os.O_CREATE|os.O_RDWR, 0666)
- defer file.Close()
- //os.Stdout
- writer := bufio.NewWriter(file)
- t, err := template.ParseFiles("./tmpl/struct.go.template")
- if err != nil {
- panic(err)
- }
- err = t.Execute(writer, MTables)
- if err != nil {
- panic(err)
- }
- }
- // LoadDaoTemplate 加载Dao生成模板
- func LoadDaoTemplate(url string) {
- os.Truncate(url, 0)
- file, _ := os.OpenFile(url, os.O_CREATE|os.O_RDWR, 0666)
- defer file.Close()
- writer := bufio.NewWriterSize(file, 1<<31)
- t, err := template.ParseFiles("./tmpl/dao.go.template")
- if err != nil {
- panic(err)
- }
- err = t.Execute(writer, MTables)
- if err != nil {
- panic(err)
- }
- }
- 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"
- case "char":
- 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"
- case "char":
- return "string"
- default:
- panic("未定义的类型:" + str)
- }
- }
|