找回密码
 立即注册
首页 业界区 安全 gorm使用gen自动生成模型和查询文件

gorm使用gen自动生成模型和查询文件

宋子 2026-2-6 15:05:00
项目使用的gin,整合的gorm,可以利用gen工具快速生成模型和查询文件
  1. package database
  2. import (
  3.         "fmt"
  4.         "sync"
  5.         "time"
  6.         "github.com/spf13/viper"
  7.         "gorm.io/driver/mysql"
  8.         "gorm.io/gen"
  9.         "gorm.io/gorm"
  10. )
  11. var (
  12.         instance *gorm.DB
  13.         once     sync.Once
  14. )
  15. func Instance() *gorm.DB {
  16.         once.Do(func() {
  17.                 var err error
  18.                 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  19.                         viper.GetString("database.user"),
  20.                         viper.GetString("database.pass"),
  21.                         viper.GetString("database.host"),
  22.                         viper.GetInt("database.port"),
  23.                         viper.GetString("database.name"))
  24.                   instance, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
  25.                   if err != nil {
  26.                           panic("数据库连接失败")
  27.                   }
  28.         })
  29.         if viper.GetBool("database.debug") {
  30.                 instance = instance.Debug()
  31.         }
  32.         generator := gen.NewGenerator(gen.Config{
  33.                 OutPath: "./app/dao",
  34.                 Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
  35.         })
  36.         generator.UseDB(instance)
  37.     // 非常重要,不加不生成文件!
  38.         generator.ApplyBasic(generator.GenerateAllTable()...)
  39.         generator.Execute()
  40.         db, _ := instance.DB()
  41.         db.SetMaxIdleConns(10)
  42.         db.SetMaxOpenConns(100)
  43.         db.SetConnMaxLifetime(time.Hour)
  44.         db.SetConnMaxIdleTime(30 * time.Minute)
  45.         return instance
  46. }
复制代码
需要注意以下几点:

  • 如果你想定义model目录的路径,目前只支持绝对路径(如写成./app/models这样的相对路径是不行的)或者通过设置OutPathModelPkgPath,可以实现自定义模型路径
  • model生成位置:取OutPath路径中的目录(如OutPath是./app/dao,则目录是./app),再拼接上ModelPkgPath(如不设置ModelPkgPath,默认就叫model),拼接后最终model会生成在./app/model中
  • generator.ApplyBasic(generator.GenerateAllTable()...)必须有这句,否则不生成任何modelquery文件

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册