gorm使用gen自动生成模型和查询文件
项目使用的gin,整合的gorm,可以利用gen工具快速生成模型和查询文件
package database
import (
"fmt"
"sync"
"time"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gen"
"gorm.io/gorm"
)
var (
instance *gorm.DB
once sync.Once
)
func Instance() *gorm.DB {
once.Do(func() {
var err error
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
viper.GetString("database.user"),
viper.GetString("database.pass"),
viper.GetString("database.host"),
viper.GetInt("database.port"),
viper.GetString("database.name"))
instance, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("数据库连接失败")
}
})
if viper.GetBool("database.debug") {
instance = instance.Debug()
}
generator := gen.NewGenerator(gen.Config{
OutPath: "./app/dao",
Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
})
generator.UseDB(instance)
// 非常重要,不加不生成文件!
generator.ApplyBasic(generator.GenerateAllTable()...)
generator.Execute()
db, _ := instance.DB()
db.SetMaxIdleConns(10)
db.SetMaxOpenConns(100)
db.SetConnMaxLifetime(time.Hour)
db.SetConnMaxIdleTime(30 * time.Minute)
return instance
}
需要注意以下几点:
- 如果你想定义model目录的路径,目前只支持绝对路径(如写成./app/models这样的相对路径是不行的)或者通过设置OutPath和ModelPkgPath,可以实现自定义模型路径
- model生成位置:取OutPath
路径中的目录(如OutPath是./app/dao,则目录是./app),再拼接上ModelPkgPath(如不设置ModelPkgPath,默认就叫model),拼接后最终model会生成在./app/model中 generator.ApplyBasic(generator.GenerateAllTable()...)必须有这句,否则不生成任何model和query文件

浙公网安备 33010602011771号