gorm.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package boot
  2. import (
  3. "fmt"
  4. "gxt-file-server/app/model"
  5. "gxt-file-server/app/model/entity"
  6. iModel "gxt-file-server/app/model/impl/model"
  7. "gxt-file-server/pkg/logger"
  8. "time"
  9. "github.com/gogf/gf/frame/g"
  10. "go.uber.org/dig"
  11. "gorm.io/driver/mysql"
  12. "gorm.io/gorm"
  13. "gorm.io/gorm/schema"
  14. )
  15. // 初始化gorm
  16. func initGorm() (*gorm.DB, error) {
  17. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s",
  18. g.Cfg().GetString("mysql.user"),
  19. g.Cfg().GetString("mysql.password"),
  20. g.Cfg().GetString("mysql.host"),
  21. g.Cfg().GetInt("mysql.port"),
  22. g.Cfg().GetString("mysql.db_name"),
  23. g.Cfg().GetString("mysql.parameters"))
  24. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  25. SkipDefaultTransaction: true, // 跳过默认事务
  26. NamingStrategy: schema.NamingStrategy{
  27. TablePrefix: g.Cfg().GetString("gorm.table_prefix"),
  28. SingularTable: true, // 使用单数表名
  29. },
  30. })
  31. if err != nil {
  32. return nil, err
  33. }
  34. db.Logger = logger.NewEntry(logger.GetLogger())
  35. if g.Cfg().GetString("common.run_mode") == "debug" {
  36. db.Debug()
  37. }
  38. sqlDb, err := db.DB()
  39. if err != nil {
  40. return nil, err
  41. }
  42. sqlDb.SetMaxIdleConns(g.Cfg().GetInt("gorm.max_idle_conns"))
  43. sqlDb.SetMaxOpenConns(g.Cfg().GetInt("gorm.max_open_conns"))
  44. sqlDb.SetConnMaxLifetime(time.Duration(g.Cfg().GetInt("gorm.max_open_conns")) * time.Second)
  45. return db, nil
  46. }
  47. // 自动创建数据表映射
  48. func autoMigrate(db *gorm.DB) error {
  49. return db.AutoMigrate(
  50. new(entity.Demo),
  51. new(entity.FileHistory),
  52. new(entity.FileChunk),
  53. )
  54. }
  55. // InjectModel inject models
  56. func InjectModel(container *dig.Container) error {
  57. _ = container.Provide(iModel.NewTrans)
  58. _ = container.Provide(func(m *iModel.Trans) model.ITrans { return m })
  59. _ = container.Provide(iModel.NewDemo)
  60. _ = container.Provide(func(m *iModel.Demo) model.IDemo { return m })
  61. _ = container.Provide(iModel.NewFileHistory)
  62. _ = container.Provide(func(m *iModel.FileHistory) model.IFileHistory { return m })
  63. _ = container.Provide(iModel.NewFileChunk)
  64. _ = container.Provide(func(m *iModel.FileChunk) model.IFileChunk { return m })
  65. return nil
  66. }