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文件
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! yyds。多谢分享 感谢分享,学习下。 谢谢分享,试用一下 谢谢楼主提供! 过来提前占个楼 新版吗?好像是停更了吧。 yyds。多谢分享 鼓励转贴优秀软件安全工具和文档! 感谢分享 东西不错很实用谢谢分享 热心回复! 鼓励转贴优秀软件安全工具和文档! 新版吗?好像是停更了吧。 分享、互助 让互联网精神温暖你我 yyds。多谢分享 这个有用。 懂技术并乐意极积无私分享的人越来越少。珍惜
页:
[1]