From 565790036e906378dd126dcd5b5ed0639a606079 Mon Sep 17 00:00:00 2001 From: zhangyuyu <1580074674@qq.com> Date: Mon, 18 Dec 2023 20:26:43 +0800 Subject: [PATCH] improve gen dao to support removeFieldPrefix (#3208) --- cmd/gf/internal/cmd/gendao/gendao.go | 47 ++++++------ cmd/gf/internal/cmd/gendao/gendao_dao.go | 25 ++++-- .../internal/cmd/gendao/gendao_structure.go | 7 +- .../internal/cmd/genpbentity/genpbentity.go | 76 +++++++++++-------- 4 files changed, 93 insertions(+), 62 deletions(-) diff --git a/cmd/gf/internal/cmd/gendao/gendao.go b/cmd/gf/internal/cmd/gendao/gendao.go index 5da3ba57773..37f9ac551f3 100644 --- a/cmd/gf/internal/cmd/gendao/gendao.go +++ b/cmd/gf/internal/cmd/gendao/gendao.go @@ -59,28 +59,29 @@ CONFIGURATION SUPPORT numeric: type: string ` - CGenDaoBriefPath = `directory path for generated files` - CGenDaoBriefLink = `database configuration, the same as the ORM configuration of GoFrame` - CGenDaoBriefTables = `generate models only for given tables, multiple table names separated with ','` - CGenDaoBriefTablesEx = `generate models excluding given tables, multiple table names separated with ','` - CGenDaoBriefPrefix = `add prefix for all table of specified link/database tables` - CGenDaoBriefRemovePrefix = `remove specified prefix of the table, multiple prefix separated with ','` - CGenDaoBriefStdTime = `use time.Time from stdlib instead of gtime.Time for generated time/date fields of tables` - CGenDaoBriefWithTime = `add created time for auto produced go files` - CGenDaoBriefGJsonSupport = `use gJsonSupport to use *gjson.Json instead of string for generated json fields of tables` - CGenDaoBriefImportPrefix = `custom import prefix for generated go files` - CGenDaoBriefDaoPath = `directory path for storing generated dao files under path` - CGenDaoBriefDoPath = `directory path for storing generated do files under path` - CGenDaoBriefEntityPath = `directory path for storing generated entity files under path` - CGenDaoBriefOverwriteDao = `overwrite all dao files both inside/outside internal folder` - CGenDaoBriefModelFile = `custom file name for storing generated model content` - CGenDaoBriefModelFileForDao = `custom file name generating model for DAO operations like Where/Data. It's empty in default` - CGenDaoBriefDescriptionTag = `add comment to description tag for each field` - CGenDaoBriefNoJsonTag = `no json tag will be added for each field` - CGenDaoBriefNoModelComment = `no model comment will be added for each field` - CGenDaoBriefClear = `delete all generated go files that do not exist in database` - CGenDaoBriefTypeMapping = `custom local type mapping for generated struct attributes relevant to fields of table` - CGenDaoBriefGroup = ` + CGenDaoBriefPath = `directory path for generated files` + CGenDaoBriefLink = `database configuration, the same as the ORM configuration of GoFrame` + CGenDaoBriefTables = `generate models only for given tables, multiple table names separated with ','` + CGenDaoBriefTablesEx = `generate models excluding given tables, multiple table names separated with ','` + CGenDaoBriefPrefix = `add prefix for all table of specified link/database tables` + CGenDaoBriefRemovePrefix = `remove specified prefix of the table, multiple prefix separated with ','` + CGenDaoBriefRemoveFieldPrefix = `remove specified prefix of the field, multiple prefix separated with ','` + CGenDaoBriefStdTime = `use time.Time from stdlib instead of gtime.Time for generated time/date fields of tables` + CGenDaoBriefWithTime = `add created time for auto produced go files` + CGenDaoBriefGJsonSupport = `use gJsonSupport to use *gjson.Json instead of string for generated json fields of tables` + CGenDaoBriefImportPrefix = `custom import prefix for generated go files` + CGenDaoBriefDaoPath = `directory path for storing generated dao files under path` + CGenDaoBriefDoPath = `directory path for storing generated do files under path` + CGenDaoBriefEntityPath = `directory path for storing generated entity files under path` + CGenDaoBriefOverwriteDao = `overwrite all dao files both inside/outside internal folder` + CGenDaoBriefModelFile = `custom file name for storing generated model content` + CGenDaoBriefModelFileForDao = `custom file name generating model for DAO operations like Where/Data. It's empty in default` + CGenDaoBriefDescriptionTag = `add comment to description tag for each field` + CGenDaoBriefNoJsonTag = `no json tag will be added for each field` + CGenDaoBriefNoModelComment = `no model comment will be added for each field` + CGenDaoBriefClear = `delete all generated go files that do not exist in database` + CGenDaoBriefTypeMapping = `custom local type mapping for generated struct attributes relevant to fields of table` + CGenDaoBriefGroup = ` specifying the configuration group name of database for generated ORM instance, it's not necessary and the default value is "default" ` @@ -145,6 +146,7 @@ func init() { `CGenDaoBriefTablesEx`: CGenDaoBriefTablesEx, `CGenDaoBriefPrefix`: CGenDaoBriefPrefix, `CGenDaoBriefRemovePrefix`: CGenDaoBriefRemovePrefix, + `CGenDaoBriefRemoveFieldPrefix`: CGenDaoBriefRemoveFieldPrefix, `CGenDaoBriefStdTime`: CGenDaoBriefStdTime, `CGenDaoBriefWithTime`: CGenDaoBriefWithTime, `CGenDaoBriefDaoPath`: CGenDaoBriefDaoPath, @@ -180,6 +182,7 @@ type ( Group string `name:"group" short:"g" brief:"{CGenDaoBriefGroup}" d:"default"` Prefix string `name:"prefix" short:"f" brief:"{CGenDaoBriefPrefix}"` RemovePrefix string `name:"removePrefix" short:"r" brief:"{CGenDaoBriefRemovePrefix}"` + RemoveFieldPrefix string `name:"removeFieldPrefix" short:"fr" brief:"{CGenDaoBriefRemoveFieldPrefix}"` JsonCase string `name:"jsonCase" short:"j" brief:"{CGenDaoBriefJsonCase}" d:"CamelLower"` ImportPrefix string `name:"importPrefix" short:"i" brief:"{CGenDaoBriefImportPrefix}"` DaoPath string `name:"daoPath" short:"d" brief:"{CGenDaoBriefDaoPath}" d:"dao"` diff --git a/cmd/gf/internal/cmd/gendao/gendao_dao.go b/cmd/gf/internal/cmd/gendao/gendao_dao.go index de3bdd528f7..0b572405e0c 100644 --- a/cmd/gf/internal/cmd/gendao/gendao_dao.go +++ b/cmd/gf/internal/cmd/gendao/gendao_dao.go @@ -138,6 +138,7 @@ type generateDaoInternalInput struct { func generateDaoInternal(in generateDaoInternalInput) { path := filepath.FromSlash(gfile.Join(in.DirPathDaoInternal, in.FileName+".go")) + removeFieldPrefixArray := gstr.SplitAndTrim(in.RemoveFieldPrefix, ",") modelContent := gstr.ReplaceByMap( getTemplateFromPathOrDefault(in.TplDaoInternalPath, consts.TemplateGenDaoInternalContent), g.MapStrStr{ @@ -146,8 +147,8 @@ func generateDaoInternal(in generateDaoInternalInput) { tplVarGroupName: in.Group, tplVarTableNameCamelCase: in.TableNameCamelCase, tplVarTableNameCamelLowerCase: in.TableNameCamelLowerCase, - tplVarColumnDefine: gstr.Trim(generateColumnDefinitionForDao(in.FieldMap)), - tplVarColumnNames: gstr.Trim(generateColumnNamesForDao(in.FieldMap)), + tplVarColumnDefine: gstr.Trim(generateColumnDefinitionForDao(in.FieldMap, removeFieldPrefixArray)), + tplVarColumnNames: gstr.Trim(generateColumnNamesForDao(in.FieldMap, removeFieldPrefixArray)), }) modelContent = replaceDefaultVar(in.CGenDaoInternalInput, modelContent) if err := gfile.PutContents(path, strings.TrimSpace(modelContent)); err != nil { @@ -160,16 +161,23 @@ func generateDaoInternal(in generateDaoInternalInput) { // generateColumnNamesForDao generates and returns the column names assignment content of column struct // for specified table. -func generateColumnNamesForDao(fieldMap map[string]*gdb.TableField) string { +func generateColumnNamesForDao(fieldMap map[string]*gdb.TableField, removeFieldPrefixArray []string) string { var ( buffer = bytes.NewBuffer(nil) array = make([][]string, len(fieldMap)) names = sortFieldKeyForDao(fieldMap) ) + for index, name := range names { field := fieldMap[name] + + newFiledName := field.Name + for _, v := range removeFieldPrefixArray { + newFiledName = gstr.TrimLeftStr(newFiledName, v, 1) + } + array[index] = []string{ - " #" + gstr.CaseCamel(field.Name) + ":", + " #" + gstr.CaseCamel(newFiledName) + ":", fmt.Sprintf(` #"%s",`, field.Name), } } @@ -189,12 +197,13 @@ func generateColumnNamesForDao(fieldMap map[string]*gdb.TableField) string { } // generateColumnDefinitionForDao generates and returns the column names definition for specified table. -func generateColumnDefinitionForDao(fieldMap map[string]*gdb.TableField) string { +func generateColumnDefinitionForDao(fieldMap map[string]*gdb.TableField, removeFieldPrefixArray []string) string { var ( buffer = bytes.NewBuffer(nil) array = make([][]string, len(fieldMap)) names = sortFieldKeyForDao(fieldMap) ) + for index, name := range names { var ( field = fieldMap[name] @@ -203,8 +212,12 @@ func generateColumnDefinitionForDao(fieldMap map[string]*gdb.TableField) string "\r", " ", })) ) + newFiledName := field.Name + for _, v := range removeFieldPrefixArray { + newFiledName = gstr.TrimLeftStr(newFiledName, v, 1) + } array[index] = []string{ - " #" + gstr.CaseCamel(field.Name), + " #" + gstr.CaseCamel(newFiledName), " # " + "string", " #" + fmt.Sprintf(`// %s`, comment), } diff --git a/cmd/gf/internal/cmd/gendao/gendao_structure.go b/cmd/gf/internal/cmd/gendao/gendao_structure.go index 77d84b6624b..c4398c8c1e7 100644 --- a/cmd/gf/internal/cmd/gendao/gendao_structure.go +++ b/cmd/gf/internal/cmd/gendao/gendao_structure.go @@ -126,8 +126,13 @@ func generateStructFieldDefinition( tagKey = "`" descriptionTag = gstr.Replace(formatComment(field.Comment), `"`, `\"`) ) + removeFieldPrefixArray := gstr.SplitAndTrim(in.RemoveFieldPrefix, ",") + newFiledName := field.Name + for _, v := range removeFieldPrefixArray { + newFiledName = gstr.TrimLeftStr(newFiledName, v, 1) + } attrLines = []string{ - " #" + gstr.CaseCamel(field.Name), + " #" + gstr.CaseCamel(newFiledName), " #" + localTypeNameStr, } attrLines = append(attrLines, " #"+fmt.Sprintf(tagKey+`json:"%s"`, jsonTag)) diff --git a/cmd/gf/internal/cmd/genpbentity/genpbentity.go b/cmd/gf/internal/cmd/genpbentity/genpbentity.go index 83d9e32bd91..624c450c264 100644 --- a/cmd/gf/internal/cmd/genpbentity/genpbentity.go +++ b/cmd/gf/internal/cmd/genpbentity/genpbentity.go @@ -31,16 +31,17 @@ import ( type ( CGenPbEntity struct{} CGenPbEntityInput struct { - g.Meta `name:"pbentity" config:"{CGenPbEntityConfig}" brief:"{CGenPbEntityBrief}" eg:"{CGenPbEntityEg}" ad:"{CGenPbEntityAd}"` - Path string `name:"path" short:"p" brief:"{CGenPbEntityBriefPath}" d:"manifest/protobuf/pbentity"` - Package string `name:"package" short:"k" brief:"{CGenPbEntityBriefPackage}"` - Link string `name:"link" short:"l" brief:"{CGenPbEntityBriefLink}"` - Tables string `name:"tables" short:"t" brief:"{CGenPbEntityBriefTables}"` - Prefix string `name:"prefix" short:"f" brief:"{CGenPbEntityBriefPrefix}"` - RemovePrefix string `name:"removePrefix" short:"r" brief:"{CGenPbEntityBriefRemovePrefix}"` - NameCase string `name:"nameCase" short:"n" brief:"{CGenPbEntityBriefNameCase}" d:"Camel"` - JsonCase string `name:"jsonCase" short:"j" brief:"{CGenPbEntityBriefJsonCase}" d:"CamelLower"` - Option string `name:"option" short:"o" brief:"{CGenPbEntityBriefOption}"` + g.Meta `name:"pbentity" config:"{CGenPbEntityConfig}" brief:"{CGenPbEntityBrief}" eg:"{CGenPbEntityEg}" ad:"{CGenPbEntityAd}"` + Path string `name:"path" short:"p" brief:"{CGenPbEntityBriefPath}" d:"manifest/protobuf/pbentity"` + Package string `name:"package" short:"k" brief:"{CGenPbEntityBriefPackage}"` + Link string `name:"link" short:"l" brief:"{CGenPbEntityBriefLink}"` + Tables string `name:"tables" short:"t" brief:"{CGenPbEntityBriefTables}"` + Prefix string `name:"prefix" short:"f" brief:"{CGenPbEntityBriefPrefix}"` + RemovePrefix string `name:"removePrefix" short:"r" brief:"{CGenPbEntityBriefRemovePrefix}"` + RemoveFieldPrefix string `name:"removeFieldPrefix" short:"fr" brief:"{CGenPbEntityBriefRemoveFieldPrefix}"` + NameCase string `name:"nameCase" short:"n" brief:"{CGenPbEntityBriefNameCase}" d:"Camel"` + JsonCase string `name:"jsonCase" short:"j" brief:"{CGenPbEntityBriefJsonCase}" d:"CamelLower"` + Option string `name:"option" short:"o" brief:"{CGenPbEntityBriefOption}"` } CGenPbEntityOutput struct{} @@ -87,14 +88,15 @@ CONFIGURATION SUPPORT option java_package = "protobuf/demos"; option php_namespace = "protobuf/demos"; ` - CGenPbEntityBriefPath = `directory path for generated files storing` - CGenPbEntityBriefPackage = `package path for all entity proto files` - CGenPbEntityBriefLink = `database configuration, the same as the ORM configuration of GoFrame` - CGenPbEntityBriefTables = `generate models only for given tables, multiple table names separated with ','` - CGenPbEntityBriefPrefix = `add specified prefix for all entity names and entity proto files` - CGenPbEntityBriefRemovePrefix = `remove specified prefix of the table, multiple prefix separated with ','` - CGenPbEntityBriefOption = `extra protobuf options` - CGenPbEntityBriefGroup = ` + CGenPbEntityBriefPath = `directory path for generated files storing` + CGenPbEntityBriefPackage = `package path for all entity proto files` + CGenPbEntityBriefLink = `database configuration, the same as the ORM configuration of GoFrame` + CGenPbEntityBriefTables = `generate models only for given tables, multiple table names separated with ','` + CGenPbEntityBriefPrefix = `add specified prefix for all entity names and entity proto files` + CGenPbEntityBriefRemovePrefix = `remove specified prefix of the table, multiple prefix separated with ','` + CGenPbEntityBriefRemoveFieldPrefix = `remove specified prefix of the field, multiple prefix separated with ','` + CGenPbEntityBriefOption = `extra protobuf options` + CGenPbEntityBriefGroup = ` specifying the configuration group name of database for generated ORM instance, it's not necessary and the default value is "default" ` @@ -120,20 +122,21 @@ set it to "none" to ignore json tag generating. func init() { gtag.Sets(g.MapStrStr{ - `CGenPbEntityConfig`: CGenPbEntityConfig, - `CGenPbEntityBrief`: CGenPbEntityBrief, - `CGenPbEntityEg`: CGenPbEntityEg, - `CGenPbEntityAd`: CGenPbEntityAd, - `CGenPbEntityBriefPath`: CGenPbEntityBriefPath, - `CGenPbEntityBriefPackage`: CGenPbEntityBriefPackage, - `CGenPbEntityBriefLink`: CGenPbEntityBriefLink, - `CGenPbEntityBriefTables`: CGenPbEntityBriefTables, - `CGenPbEntityBriefPrefix`: CGenPbEntityBriefPrefix, - `CGenPbEntityBriefRemovePrefix`: CGenPbEntityBriefRemovePrefix, - `CGenPbEntityBriefGroup`: CGenPbEntityBriefGroup, - `CGenPbEntityBriefNameCase`: CGenPbEntityBriefNameCase, - `CGenPbEntityBriefJsonCase`: CGenPbEntityBriefJsonCase, - `CGenPbEntityBriefOption`: CGenPbEntityBriefOption, + `CGenPbEntityConfig`: CGenPbEntityConfig, + `CGenPbEntityBrief`: CGenPbEntityBrief, + `CGenPbEntityEg`: CGenPbEntityEg, + `CGenPbEntityAd`: CGenPbEntityAd, + `CGenPbEntityBriefPath`: CGenPbEntityBriefPath, + `CGenPbEntityBriefPackage`: CGenPbEntityBriefPackage, + `CGenPbEntityBriefLink`: CGenPbEntityBriefLink, + `CGenPbEntityBriefTables`: CGenPbEntityBriefTables, + `CGenPbEntityBriefPrefix`: CGenPbEntityBriefPrefix, + `CGenPbEntityBriefRemovePrefix`: CGenPbEntityBriefRemovePrefix, + `CGenPbEntityBriefRemoveFieldPrefix`: CGenPbEntityBriefRemoveFieldPrefix, + `CGenPbEntityBriefGroup`: CGenPbEntityBriefGroup, + `CGenPbEntityBriefNameCase`: CGenPbEntityBriefNameCase, + `CGenPbEntityBriefJsonCase`: CGenPbEntityBriefJsonCase, + `CGenPbEntityBriefOption`: CGenPbEntityBriefOption, }) } @@ -351,9 +354,16 @@ func generateMessageFieldForPbEntity(index int, field *gdb.TableField, in CGenPb jsonTagStr = " " + jsonTagStr } } + + removeFieldPrefixArray := gstr.SplitAndTrim(in.RemoveFieldPrefix, ",") + newFiledName := field.Name + for _, v := range removeFieldPrefixArray { + newFiledName = gstr.TrimLeftStr(newFiledName, v, 1) + } + return []string{ " #" + localTypeNameStr, - " #" + formatCase(field.Name, in.NameCase), + " #" + formatCase(newFiledName, in.NameCase), " #= " + gconv.String(index) + jsonTagStr + ";", " #" + fmt.Sprintf(`// %s`, comment), }