From 02aead96152cf35542d950b4fd89da05b97da6a5 Mon Sep 17 00:00:00 2001 From: yanjiangtao <1054792432@qq.com> Date: Tue, 6 Apr 2021 17:19:02 +0800 Subject: [PATCH] =?UTF-8?q?1.simple=E9=85=8D=E7=BD=AE=E4=B8=BAtrue?= =?UTF-8?q?=E4=B8=8D=E8=BE=93=E5=87=BAgorm=E6=A0=87=E7=AD=BE=202.=E5=B0=86?= =?UTF-8?q?is=5Ftable=5Fname=E4=B8=AD=E7=9A=84column=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E6=8A=BD=E6=88=90=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E5=85=8D=E9=85=8D=E7=BD=AE=E7=9A=84=E8=80=A6=E5=90=88?= =?UTF-8?q?=E3=80=82=203.=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E8=A1=A8?= =?UTF-8?q?=E5=90=8D=E7=94=9F=E6=88=90=E5=A4=9A=E4=B8=AAmodel=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=88=E4=B8=80=E4=B8=AA=E8=A1=A8=E4=B8=80?= =?UTF-8?q?=E4=B8=AAmodel=EF=BC=89=20-------------------------------------?= =?UTF-8?q?------=201.=20Simple=20is=20configured=20as=20true=20and=20does?= =?UTF-8?q?=20not=20output=20Gorm=20tag=202.=20Will=20be=5F=20table=5F=20T?= =?UTF-8?q?he=20column=20in=20name=20generates=20a=20separate=20extraction?= =?UTF-8?q?=20configuration=20to=20avoid=20the=20coupling=20of=20configura?= =?UTF-8?q?tion.=203.=20Add=20the=20configuration=20of=20generating=20mult?= =?UTF-8?q?iple=20models=20according=20to=20the=20table=20name=20(one=20mo?= =?UTF-8?q?del=20for=20each=20table)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + README_zh_cn.md | 2 + data/config/MyIni.go | 62 +++++++++++++++++--------- data/config/common.go | 18 ++++---- data/view/genstruct/common.go | 2 + data/view/model/model.go | 84 ++++++++++++++++++++++++----------- 6 files changed, 117 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 4b83572..8f09664 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,8 @@ is_web_tag: false is_web_tag_pk_hidden: false table_prefix: "" #table prefix table_names: "" # Specified table generation, multiple tables with , separated +is_column_name: true # Whether to generate column names +is_out_file_by_table_name: false # Whether to generate multiple models based on table names db_info : host : "127.0.0.1" port : 3306 diff --git a/README_zh_cn.md b/README_zh_cn.md index f053391..02635e6 100644 --- a/README_zh_cn.md +++ b/README_zh_cn.md @@ -56,6 +56,8 @@ is_web_tag: false is_web_tag_pk_hidden: false table_prefix: "" #表前缀 table_names: "" #指定表生成,多个表用,隔开 +is_column_name: true # 是否生成列名 +is_out_file_by_table_name: false # 是否根据表名生成多个model db_info: host : 127.0.0.1 port : 3306 diff --git a/data/config/MyIni.go b/data/config/MyIni.go index b9cb3d9..1add680 100644 --- a/data/config/MyIni.go +++ b/data/config/MyIni.go @@ -9,26 +9,28 @@ import ( // Config custom config struct type Config struct { - CfgBase `yaml:"base"` - DBInfo DBInfo `yaml:"db_info"` - OutDir string `yaml:"out_dir"` - URLTag string `yaml:"url_tag"` // url tag - Language string `yaml:"language"` // language - DbTag string `yaml:"db_tag"` // 数据库标签(gormt,db) - Simple bool `yaml:"simple"` - IsWEBTag bool `yaml:"is_web_tag"` - IsWebTagPkHidden bool `yaml:"is_web_tag_pk_hidden"` // web标记是否隐藏主键 - IsForeignKey bool `yaml:"is_foreign_key"` - IsOutSQL bool `yaml:"is_out_sql"` - IsOutFunc bool `yaml:"is_out_func"` - IsGUI bool `yaml:"is_gui"` // - IsTableName bool `yaml:"is_table_name"` - IsNullToPoint bool `yaml:"is_null_to_point"` // null to porint - TablePrefix string `yaml:"table_prefix"` // 表前缀 - SelfTypeDef map[string]string `yaml:"self_type_define"` - OutFileName string `yaml:"out_file_name"` - WebTagType int `yaml:"web_tag_type"` // 默认小驼峰 - TableNames string `yaml:"table_names"` // 表名(多个表名用","隔开) + CfgBase `yaml:"base"` + DBInfo DBInfo `yaml:"db_info"` + OutDir string `yaml:"out_dir"` + URLTag string `yaml:"url_tag"` // url tag + Language string `yaml:"language"` // language + DbTag string `yaml:"db_tag"` // 数据库标签(gormt,db) + Simple bool `yaml:"simple"` + IsWEBTag bool `yaml:"is_web_tag"` + IsWebTagPkHidden bool `yaml:"is_web_tag_pk_hidden"` // web标记是否隐藏主键 + IsForeignKey bool `yaml:"is_foreign_key"` + IsOutSQL bool `yaml:"is_out_sql"` + IsOutFunc bool `yaml:"is_out_func"` + IsGUI bool `yaml:"is_gui"` // + IsTableName bool `yaml:"is_table_name"` + IsNullToPoint bool `yaml:"is_null_to_point"` // null to porint + TablePrefix string `yaml:"table_prefix"` // 表前缀 + SelfTypeDef map[string]string `yaml:"self_type_define"` + OutFileName string `yaml:"out_file_name"` + WebTagType int `yaml:"web_tag_type"` // 默认小驼峰 + TableNames string `yaml:"table_names"` // 表名(多个表名用","隔开) + IsColumnName bool `yaml:"is_column_name"` //是否输出列名 + IsOutFileByTableName bool `yaml:"is_out_file_by_table_name"` //是否根据表名生成文件(多个表名生成多个文件) } // DBInfo mysql database information. mysql 数据库信息 @@ -293,3 +295,23 @@ func GetOriginTableNames() string { func SetTableNames(tableNames string) { _map.TableNames = tableNames } + +//GetIsColumnName get gen columnName config . 获取生成列名的config +func GetIsColumnName() bool { + return _map.IsColumnName +} + +//SetIsColumnName set gen ColumnName config. 设置生成列名的config +func SetIsColumnName(isColumnName bool) { + _map.IsColumnName = isColumnName +} + +//GetIsOutFileByTableName get gen columnName config . 设置是否根据表名生成文件 +func GetIsOutFileByTableName() bool { + return _map.IsOutFileByTableName +} + +//SetIsOutFileByTableName set gen ColumnName config. 设置是否根据表名生成文件 +func SetIsOutFileByTableName(isOutFileByTableName bool) { + _map.IsColumnName = isOutFileByTableName +} diff --git a/data/config/common.go b/data/config/common.go index 65a2085..065299c 100644 --- a/data/config/common.go +++ b/data/config/common.go @@ -39,14 +39,16 @@ var _map = Config{ Simple: false, IsWEBTag: false, // SingularTable: true, - IsForeignKey: true, - IsOutSQL: false, - IsOutFunc: true, - IsGUI: false, - TablePrefix: "", - SelfTypeDef: make(map[string]string), - WebTagType: 0, - TableNames: "", + IsForeignKey: true, + IsOutSQL: false, + IsOutFunc: true, + IsGUI: false, + TablePrefix: "", + SelfTypeDef: make(map[string]string), + WebTagType: 0, + TableNames: "", + IsColumnName: true, + IsOutFileByTableName: false, } var configPath string diff --git a/data/view/genstruct/common.go b/data/view/genstruct/common.go index 3899d79..0c9a77b 100644 --- a/data/view/genstruct/common.go +++ b/data/view/genstruct/common.go @@ -282,7 +282,9 @@ func (p *GenPackage) Generate() string { for _, v1 := range v.GenerateTableName() { pa.Add(v1) } + } + if config.GetIsColumnName() { for _, v2 := range v.GenerateColumnName() { // add column list pa.Add(v2) } diff --git a/data/view/model/model.go b/data/view/model/model.go index efb9d5f..6808c6c 100755 --- a/data/view/model/model.go +++ b/data/view/model/model.go @@ -27,21 +27,30 @@ func Generate(info DBInfo) (out []GenOutInfo, m _Model) { } // struct - var stt GenOutInfo - stt.FileCtx = m.generate() - stt.FileName = info.DbName + ".go" + if config.GetIsOutFileByTableName() { + outByTable := m.GenerateByTableName() + out = append(out, outByTable...) + } else { + var stt GenOutInfo + stt.FileCtx = m.generate() + stt.FileName = info.DbName + ".go" - if name := config.GetOutFileName(); len(name) > 0 { - stt.FileName = name + ".go" + if name := config.GetOutFileName(); len(name) > 0 { + stt.FileName = name + ".go" + } + out = append(out, stt) } - out = append(out, stt) // ------end // gen function if config.GetIsOutFunc() { out = append(out, m.generateFunc()...) } + for i, outInfo := range out { + fmt.Printf("-------------%d-----------", i) + fmt.Println(outInfo) + } // -------------- end return } @@ -76,6 +85,28 @@ func (m *_Model) GetPackage() genstruct.GenPackage { return *m.pkg } +// GetPackageByTableName Generate multiple model files based on the table name. 根据表名生成多个model文件 +func (m *_Model) GenerateByTableName() (out []GenOutInfo) { + if m.pkg == nil { + for _, tab := range m.info.TabList { + var pkg genstruct.GenPackage + pkg.SetPackage(m.info.PackageName) //package name + var sct genstruct.GenStruct + sct.SetStructName(getCamelName(tab.Name)) // Big hump.大驼峰 + sct.SetNotes(tab.Notes) + sct.AddElement(m.genTableElement(tab.Em)...) // build element.构造元素 + sct.SetCreatTableStr(tab.SQLBuildStr) + sct.SetTableName(tab.Name) + pkg.AddStruct(sct) + var stt GenOutInfo + stt.FileCtx = pkg.Generate() + stt.FileName = tab.Name + ".go" + out = append(out, stt) + } + } + return +} + func (m *_Model) generate() string { m.pkg = nil m.GetPackage() @@ -96,22 +127,25 @@ func (m *_Model) genTableElement(cols []ColumnsInfo) (el []genstruct.GenElement) tmp.SetName(getCamelName(v.Name)) tmp.SetNotes(v.Notes) tmp.SetType(getTypeName(v.Type, v.IsNull)) - for _, v1 := range v.Index { - switch v1.Key { - // case ColumnsKeyDefault: - case ColumnsKeyPrimary: // primary key.主键 - tmp.AddTag(_tagGorm, "primaryKey") - isPK = true - case ColumnsKeyUnique: // unique key.唯一索引 - tmp.AddTag(_tagGorm, "unique") - case ColumnsKeyIndex: // index key.复合索引 - if v1.KeyType == "FULLTEXT" { - tmp.AddTag(_tagGorm, getUninStr("index", ":", v1.KeyName)+",class:FULLTEXT") - } else { - tmp.AddTag(_tagGorm, getUninStr("index", ":", v1.KeyName)) + // not simple output. 默认不输出gorm标签 + if !config.GetSimple() { + for _, v1 := range v.Index { + switch v1.Key { + // case ColumnsKeyDefault: + case ColumnsKeyPrimary: // primary key.主键 + tmp.AddTag(_tagGorm, "primaryKey") + isPK = true + case ColumnsKeyUnique: // unique key.唯一索引 + tmp.AddTag(_tagGorm, "unique") + case ColumnsKeyIndex: // index key.复合索引 + if v1.KeyType == "FULLTEXT" { + tmp.AddTag(_tagGorm, getUninStr("index", ":", v1.KeyName)+",class:FULLTEXT") + } else { + tmp.AddTag(_tagGorm, getUninStr("index", ":", v1.KeyName)) + } + case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引 + tmp.AddTag(_tagGorm, getUninStr("uniqueIndex", ":", v1.KeyName)) } - case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引 - tmp.AddTag(_tagGorm, getUninStr("uniqueIndex", ":", v1.KeyName)) } } } @@ -124,10 +158,10 @@ func (m *_Model) genTableElement(cols []ColumnsInfo) (el []genstruct.GenElement) if !v.IsNull { tmp.AddTag(_tagGorm, "not null") } - } - // default tag - if len(v.Gormt) > 0 { - tmp.AddTag(_tagGorm, v.Gormt) + // default tag + if len(v.Gormt) > 0 { + tmp.AddTag(_tagGorm, v.Gormt) + } } // json tag