diff --git a/.gitignore b/.gitignore index 20c5283..b237734 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ db/oauth_db.go /model gormt.yml gormt +/vendor diff --git a/README_zh_cn.md b/README_zh_cn.md index f04147b..aa20f13 100644 --- a/README_zh_cn.md +++ b/README_zh_cn.md @@ -62,7 +62,11 @@ db_info: password : qwer database : oauth_db type: 0 # 数据库类型:0:mysql , 1:sqlite , 2:mssql - +self_type_define: # 自定义数据类型映射 + datetime: time.Time + date: time.Time +out_file_name: "" # 自定义生成文件名 +web_tag_type: 0 # json tag类型 0: 小驼峰 1: 下划线 ``` diff --git a/config.yml b/config.yml index 12a8adb..2b333c7 100644 --- a/config.yml +++ b/config.yml @@ -21,6 +21,11 @@ db_info: password : 123456 database : matrix type: 0 # 数据库类型:0:mysql , 1:sqlite , 2:mssql +self_type_define: # 自定义数据类型映射 + datetime: time.Time + time: time.Time +out_file_name: "" # 自定义生成文件名 +web_tag_type: 0 # json tag类型 0: 小驼峰 1: 下划线 # sqlite # db_info: diff --git a/data/config/MyIni.go b/data/config/MyIni.go index 12855af..f8e2aa0 100644 --- a/data/config/MyIni.go +++ b/data/config/MyIni.go @@ -9,21 +9,24 @@ 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"` // 表前缀 + 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"` // 默认小驼峰 } // DBInfo mysql database information. mysql 数据库信息 @@ -221,3 +224,33 @@ func SetTablePrefix(t string) { func GetTablePrefix() string { return _map.TablePrefix } + +// SetSelfTypeDefine 设置自定义字段映射 +func SetSelfTypeDefine(data map[string]string) { + _map.SelfTypeDef = data +} + +// GetSelfTypeDefine 获取自定义字段映射 +func GetSelfTypeDefine() map[string]string { + return _map.SelfTypeDef +} + +// SetOutFileName 设置输出文件名 +func SetOutFileName(s string) { + _map.OutFileName = s +} + +// GetOutFileName 获取输出文件名 +func GetOutFileName() string { + return _map.OutFileName +} + +// SetWebTagType 设置json tag类型 +func SetWebTagType(i int) { + _map.WebTagType = i +} + +// GetWebTagType 获取json tag类型 +func GetWebTagType() int { + return _map.WebTagType +} diff --git a/data/config/common.go b/data/config/common.go index df57fc2..177d4cb 100644 --- a/data/config/common.go +++ b/data/config/common.go @@ -44,6 +44,8 @@ var _map = Config{ IsOutFunc: true, IsGUI: false, TablePrefix: "", + SelfTypeDef: make(map[string]string), + WebTagType: 0, } var configPath string diff --git a/data/view/model/common.go b/data/view/model/common.go index 5ea0544..33086b0 100755 --- a/data/view/model/common.go +++ b/data/view/model/common.go @@ -67,6 +67,12 @@ func FilterKeywords(src string) string { // getTypeName Type acquisition filtering.类型获取过滤 func getTypeName(name string, isNull bool) string { + // 优先匹配自定义类型 + selfDefineTypeMqlDicMap := config.GetSelfTypeDefine() + if v, ok := selfDefineTypeMqlDicMap[name]; ok { + return fixNullToPorint(v, isNull) + } + // Precise matching first.先精确匹配 if v, ok := cnf.TypeMysqlDicMp[name]; ok { return fixNullToPorint(v, isNull) diff --git a/data/view/model/model.go b/data/view/model/model.go index 37867d4..efb9d5f 100755 --- a/data/view/model/model.go +++ b/data/view/model/model.go @@ -31,6 +31,10 @@ func Generate(info DBInfo) (out []GenOutInfo, m _Model) { stt.FileCtx = m.generate() stt.FileName = info.DbName + ".go" + if name := config.GetOutFileName(); len(name) > 0 { + stt.FileName = name + ".go" + } + out = append(out, stt) // ------end @@ -131,7 +135,11 @@ func (m *_Model) genTableElement(cols []ColumnsInfo) (el []genstruct.GenElement) if isPK && config.GetIsWebTagPkHidden() { tmp.AddTag(_tagJSON, "-") } else { - tmp.AddTag(_tagJSON, mybigcamel.UnSmallMarshal(mybigcamel.Marshal(v.Name))) + if config.GetWebTagType() == 0 { + tmp.AddTag(_tagJSON, mybigcamel.UnSmallMarshal(mybigcamel.Marshal(v.Name))) + } else { + tmp.AddTag(_tagJSON, mybigcamel.UnMarshal(v.Name)) + } } } @@ -174,7 +182,11 @@ func (m *_Model) genForeignKey(col ColumnsInfo) (fklist []genstruct.GenElement) // json tag if config.GetIsWEBTag() { - tmp.AddTag(_tagJSON, mybigcamel.UnSmallMarshal(mybigcamel.Marshal(v.TableName))+"List") + if config.GetWebTagType() == 0 { + tmp.AddTag(_tagJSON, mybigcamel.UnSmallMarshal(mybigcamel.Marshal(v.TableName))+"List") + } else { + tmp.AddTag(_tagJSON, mybigcamel.UnMarshal(v.TableName)+"_list") + } } fklist = append(fklist, tmp)