开源代码:
git clone https://gitee.com/ichub/gowebfactroy-v2.git
uml
swagger
目录
配置参数
配置参数
factroy: author: leijianming@163.com pkgNow: gitee.com/ichub/gowebfactroynew/mysql/ pkgNew: gitee.com/ichub/gowebfactroynew/code/mysql/db/
标准接口
type Iface interface { Build() *dto.TableFile Istest() bool BuildFile() *dto.TableFile BuildCode() string BuildFiles(genpath string, suffux string, content string) *dto.TableFile SetTableFactroy(tf *table.TableFactroy) GetTableFactroy() *table.TableFactroy }
代码模板文件:
元数据转换模型参数:
func (model *ModelFactroy) Build() *dto.TableFile { model.ModelFactors = model.BuildModel() return model.BuildFiles(model.GendirModel, ".go", model.BuildCode()) }
func (this *TableFactroy) BuildModel() *dto.ModelFactors { if len(this.Tables) == 0 { this.FindTables() } var columns = this.FindMetadata().Columns var models = this.makeModelBodyGo(columns) var modelEntities = this.makeModelDtoGo(columns) var modelParams = this.makeModelParamsGo(columns) var modelProtos = this.MakeModelProtoBody(columns) var m = &dto.ModelFactors{ Columns: columns, Models: models, ModelEntities: modelEntities, ModelParams: modelParams, Protos: modelProtos, } m.InitProxy(m) return m }
填充模板参数
func (s *ServiceFactroy) BuildCode() string { dbTemplate := s.DbTemplate dbTemplate.FileKey = filetemplate.KEY_SERVICE dbTemplate.TableDto = s.TableFactroy.TableDto dbTemplate.Put("ModelName", stringutils.Case2Camel(s.TableFactroy.TableName)) if s.TableFactroy.FindGoType(s.TableFactroy.GetPkInfo().PkeyType) == "string" { dbTemplate.Put("PkeyValue", `""`) dbTemplate.Put("fmtType", "%s") }else{ dbTemplate.Put("PkeyValue", "0") dbTemplate.Put("fmtType", "%d") } return s.Parse() }
更新文件内容:
s.Parse()
生成代码文件
func (model *BuildFactroy) BuildFiles(genpath string, suffux string, content string) *dto.TableFile { model.TableFile = dto.Default() tablebase := stringutils.Lcfirst(model.TableName) // model.TableFile.Dir = model.TransDir(genpath, tablebase) //确定目录 model.TableFile.Dir = model.TransDir(genpath, "") model.TableFile.File = tablebase + suffux model.TableFile.Content = content model.FilePaths.RegisterModelFile(model.TableName, model.TableFile.FullPathFile()) model.AppenTableFile(model.TableFile) model.WriteFileModule(model.TableFile) goutils.Info(model.TableFile) return model.TableFile }
func (this *FileFactroy) WriteFileModule(tableFile *dto.TableFile) { //更新包名 tableFile.Content = this.ReplacePkg(tableFile.Content) this.WriteFile(tableFile) }