db.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package lxDb
  2. import (
  3. "fmt"
  4. "git.listensoft.net/tool/lxutils/lxzap"
  5. "go.uber.org/zap"
  6. "gorm.io/driver/mysql"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. "gorm.io/gorm/schema"
  10. "os"
  11. )
  12. // DB2.0 数据库连接 gorm2.0
  13. var DB *gorm.DB //gs 数据库
  14. type DbConfig struct {
  15. Host string
  16. Port string
  17. User string
  18. Password string
  19. Database string
  20. Charset string
  21. }
  22. func InitDB(env string, conf DbConfig) {
  23. //dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  24. //newLogger := logger.New(
  25. // //zap.NewStdLog(),
  26. // log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  27. // logger.Config{
  28. // SlowThreshold: 200 * time.Millisecond, // Slow SQL threshold
  29. // LogLevel: logger.Info, // Log level
  30. // IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
  31. // Colorful: false, // Disable color
  32. // },
  33. //)
  34. if conf.Host == "" {
  35. DB = nil
  36. fmt.Println("未配置Db连接")
  37. return
  38. }
  39. if conf.Charset == "" {
  40. conf.Charset = "utf8mb4"
  41. }
  42. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
  43. conf.User, conf.Password, conf.Host, conf.Port, conf.Database, conf.Charset)
  44. if env == "dev" {
  45. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  46. Logger: logger.Default.LogMode(logger.Info),
  47. NamingStrategy: schema.NamingStrategy{
  48. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  49. },
  50. })
  51. if err != nil {
  52. fmt.Println(err.Error())
  53. os.Exit(-1)
  54. }
  55. DB = db
  56. } else {
  57. logger2 := lxzap.NewGormZap(zap.L())
  58. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  59. //Logger: logger.Default.LogMode(logger.Info),
  60. Logger: logger2,
  61. NamingStrategy: schema.NamingStrategy{
  62. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  63. },
  64. })
  65. if err != nil {
  66. fmt.Println(err.Error())
  67. os.Exit(-1)
  68. }
  69. DB = db
  70. }
  71. //db.AutoMigrate(TaskData{}, Task{}, Version{})
  72. }