gen.Config

type Config struct {
    db *gorm.DB   // 设置方式: UseDB(db)
 
	OutPath      string // 输出目录
	OutFile      string // 通用查询入口,有一个Q对象字段是所有表(简化query), default: gen.go
	ModelPkgPath string // model目录路径,和OutPath处于同一目录,设置了才会生成model
    
	WithUnitTest bool   // 给所有生成的查询生成测试代码,但是基本无用,生成的动态SQL的测试简直太无用了
 
	// generate model global configuration
	FieldNullable     bool // 为nullable字段生成指针类型,包括主键
	FieldCoverable    bool // 在Create赋值default, 但是好像没有
	FieldSignable     bool // 使用signable类型
	FieldWithIndexTag bool // generate with gorm index tag
	FieldWithTypeTag  bool // generate with gorm column type tag
 
	Mode GenerateMode
    //gen.WithDefaultQuery 生成Q、表全局变量,但仍然需要调用SetDefault方法传递DB
    //gen.WithQueryInterface 动态SQL
    //gen.WithoutContext 不知道有什么,用了好像也没有区别
 
	queryPkgName   string // generated query code's package name
	modelPkgPath   string // model pkg path in target project
	dbNameOpts     []model.SchemaNameOpt
	importPkgPaths []string
 
	// name strategy for syncing table from db
	tableNameNS func(tableName string) (targetTableName string)
	modelNameNS func(tableName string) (modelName string)
	fileNameNS  func(tableName string) (fileName string)
 
	dataTypeMap    map[string]func(columnType gorm.ColumnType) (dataType string)
	fieldJSONTagNS func(columnName string) (tagContent string)
 
	modelOpts []ModelOpt
}

gen

  • features
    • 生成表:gen.Generator.GenerateModel(tablename, ...)
    • 生成DAO:gen.Generator.ApplyBasic
      • 正向生成:一个对象
        • 需要自己调用 DB.Migrator().AutoMigrate(Model1{})同步到数据库
      • 逆向生成: 使用gen.Generator.GenerateModel生成的对象
    • Methods Template:为结构体生成方法模板,定义一个结构体+添加属性方法
    • Field扩展:name、type、tag等
    • 忽视表:在直接调用gen.Generator.GenerateAllTable时用,调用gen.Generator.WithTableNameStrategy返回空字符串
    • 从SQL文件中生成
    • 动态SQL gen.Generator.ApplyInterface