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()
}
评论已关闭