项目使用的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文件
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |