






















项目使用的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
}
需要注意以下几点:
路径中的目录(如OutPath是./app/dao,则目录是./app),再拼接上ModelPkgPath(如不设置ModelPkgPath,默认就叫model),拼接后最终model会生成在./app/model中generator.ApplyBasic(generator.GenerateAllTable()...)必须有这句,否则不生成任何model和query文件此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。