12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package database
- import (
- "gorm.io/driver/mysql"
- "gorm.io/gen"
- "gorm.io/gorm"
- "os"
- )
- func generateGormDbModel(dsn string, daoPath string) {
- currentPath, _ := os.Getwd()
- db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
- genConfig := gen.Config{
- OutPath: currentPath + "/dao" + daoPath + "/query",
- ModelPkgPath: currentPath + "/dao" + daoPath + "/model",
- Mode: gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface,
- //// 表字段可为 null 值时, 对应结体字段使用指针类型
- FieldNullable: false, // generate pointer when field is nullable
- //
- //// 表字段默认值与模型结构体字段零值不一致的字段, 在插入数据时需要赋值该字段值为零值的, 结构体字段须是指针类型才能成功, 即`FieldCoverable:true`配置下生成的结构体字段.
- //// 因为在插入时遇到字段为零值的会被GORM赋予默认值. 如字段`age`表默认值为10, 即使你显式设置为0最后也会被GORM设为10提交.
- //// 如果该字段没有上面提到的插入时赋零值的特殊需要, 则字段为非指针类型使用起来会比较方便.
- //FieldCoverable: false, // generate pointer when field has default value, to fix problem zero value cannot be assign: https://gorm.io/docs/create.html#Default-Values
- //
- //// 模型结构体字段的数字类型的符号表示是否与表字段的一致, `false`指示都用有符号类型
- //FieldSignable: false, // detect integer field's unsigned type, adjust generated data type
- //// 生成 gorm 标签的字段索引属性
- //FieldWithIndexTag: false, // generate with gorm index tag
- //// 生成 gorm 标签的字段类型属性
- //FieldWithTypeTag: true, // generate with gorm column type tag
- }
- g := gen.NewGenerator(genConfig)
- g.WithImportPkgPath("github.com/shopspring/decimal")
- g.UseDB(db)
- // Add mapping for decimal(64,18) to decimal.Decimal
- // 自定义类型映射
- dataMap := map[string]func(detailType gorm.ColumnType) (dataType string){
- "tinyint": func(detailType gorm.ColumnType) (dataType string) { return "int64" },
- "smallint": func(detailType gorm.ColumnType) (dataType string) { return "int64" },
- "mediumint": func(detailType gorm.ColumnType) (dataType string) { return "int64" },
- "bigint": func(detailType gorm.ColumnType) (dataType string) { return "int64" },
- "int": func(detailType gorm.ColumnType) (dataType string) { return "int64" },
- "decimal": func(detailType gorm.ColumnType) (dataType string) { return "decimal.Decimal" }, // 金额类型全部转换为第三方库,github.com/shopspring/decimal
- }
- g.WithDataTypeMap(dataMap)
- // 修改字段名,和系统关键字冲突
- g.WithOpts(gen.FieldRename("table", "MTable"))
- g.GenerateAllTable()
- g.ApplyBasic(g.GenerateAllTable()...)
- g.Execute()
- }
|