gorm.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package boot
  2. import (
  3. "fmt"
  4. "gxt-api-frame/app/model"
  5. "gxt-api-frame/app/model/entity"
  6. iModel "gxt-api-frame/app/model/impl/model"
  7. "gxt-api-frame/library/logger"
  8. "gxt-api-frame/library/utils"
  9. "time"
  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. utils.GetConfig("mysql.user").String(),
  19. utils.GetConfig("mysql.password").String(),
  20. utils.GetConfig("mysql.host").String(),
  21. utils.GetConfig("mysql.port").Int(),
  22. utils.GetConfig("mysql.db_name").String(),
  23. utils.GetConfig("mysql.parameters").String())
  24. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  25. SkipDefaultTransaction: true, // 跳过默认事务
  26. NamingStrategy: schema.NamingStrategy{
  27. TablePrefix: utils.GetConfig("gorm.table_prefix").String(),
  28. SingularTable: true, // 使用单数表名
  29. },
  30. })
  31. if err != nil {
  32. return nil, err
  33. }
  34. db.Logger = logger.NewEntry(logger.GetLogger())
  35. if utils.GetConfig("common.run_mode").String() == "debug" {
  36. db.Debug()
  37. }
  38. sqlDb, err := db.DB()
  39. if err != nil {
  40. return nil, err
  41. }
  42. sqlDb.SetMaxIdleConns(utils.GetConfig("gorm.max_idle_conns").Int())
  43. sqlDb.SetMaxOpenConns(utils.GetConfig("gorm.max_open_conns").Int())
  44. sqlDb.SetConnMaxLifetime(time.Duration(utils.GetConfig("gorm.max_open_conns").Int()) * time.Second)
  45. return db, nil
  46. }
  47. // 自动创建数据表映射
  48. func autoMigrate(db *gorm.DB) error {
  49. return db.AutoMigrate(
  50. new(entity.Demo),
  51. )
  52. }
  53. func InjectModel(container *dig.Container) error {
  54. _ = container.Provide(iModel.NewTrans)
  55. _ = container.Provide(func(m *iModel.Trans) model.ITrans { return m })
  56. _ = container.Provide(iModel.NewDemo)
  57. _ = container.Provide(func(m *iModel.Demo) model.IDemo { return m })
  58. return nil
  59. }