Gorm gen 自动建 models 结构体

package main

import (
    "fmt"

    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
    "gorm.io/driver/mysql"
    "gorm.io/gen"
    "gorm.io/gorm"
)

var db *gorm.DB = nil

func InitConfig() error {
    viper.SetConfigFile("config.yaml") // 指定配置文件
    viper.AddConfigPath(".")           // 指定查找配置文件的路径
    err := viper.ReadInConfig()        // 读取配置信息
    if err != nil {
        // 读取配置信息失败
        fmt.Printf("viper.ReadInConfig() Failed err:%v\n", err)
        return err
    }
    //监控并重新读取配置文件
    viper.WatchConfig()
    viper.OnConfigChange(func(e fsnotify.Event) {
        // 配置文件发生变更之后会调用的回调函数
        fmt.Println("Config file changed:", e.Name)
    })
    return nil
}

func InitDB() (err error) {
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
        viper.GetString("mysql.user"),
        viper.GetString("mysql.password"),
        viper.GetString("mysql.host"),
        viper.GetInt("mysql.port"),
        viper.GetString("mysql.dbname"),
    )
    // 也可以使用MustConnect连接不成功就panic

    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
        PrepareStmt: true,
    })
    //sqlx.Connect("mysql", dsn)
    if err != nil {
        panic("failed to connect database")
    }
    sqlDB, err := db.DB()
    sqlDB.SetMaxOpenConns(viper.GetInt("mysql.max_open_conns"))
    sqlDB.SetMaxIdleConns(viper.GetInt("mysql.max_idle_conns"))
    return
}

func main() {
    // 替换成你的 MySQL 数据库连接信息
    InitConfig()
    InitDB()

    // 初始化代码生成器
    g := gen.NewGenerator(gen.Config{
        OutPath:      "./models", // 生成的文件将放在当前目录下的 models 目录中
        ModelPkgPath: "models",   // 设置生成的 model 的包名
    })

    g.UseDB(db) // 关联数据库

    // 根据所有表生成代码
    g.GenerateAllTable()

    // 执行生成操作
    g.Execute()
}

评论已关闭