mirror of
				https://gitee.com/xiangheng/x_admin.git
				synced 2025-10-31 11:36:31 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package core
 | ||
| 
 | ||
| import (
 | ||
| 	"log"
 | ||
| 	"os"
 | ||
| 	"time"
 | ||
| 	"x_admin/config"
 | ||
| 
 | ||
| 	"gorm.io/driver/mysql"
 | ||
| 	"gorm.io/gorm"
 | ||
| 	"gorm.io/gorm/logger"
 | ||
| 	"gorm.io/gorm/schema"
 | ||
| )
 | ||
| 
 | ||
| var db = initMysql()
 | ||
| 
 | ||
| func GetDB() *gorm.DB {
 | ||
| 	return db
 | ||
| }
 | ||
| 
 | ||
| // initMysql 初始化mysql会话
 | ||
| func initMysql() *gorm.DB {
 | ||
| 	// 日志配置
 | ||
| 	slowThreshold := time.Second
 | ||
| 	ignoreRecordNotFoundError := true
 | ||
| 	logLevel := logger.Warn
 | ||
| 	if config.Config.GinMode == "debug" {
 | ||
| 		logLevel = logger.Info
 | ||
| 		slowThreshold = 200 * time.Millisecond
 | ||
| 		ignoreRecordNotFoundError = false
 | ||
| 	}
 | ||
| 	logger := logger.New(
 | ||
| 		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
 | ||
| 		logger.Config{
 | ||
| 			SlowThreshold:             slowThreshold,             // 慢 SQL 阈值
 | ||
| 			LogLevel:                  logLevel,                  // 日志级别
 | ||
| 			IgnoreRecordNotFoundError: ignoreRecordNotFoundError, // 忽略ErrRecordNotFound(记录未找到)错误
 | ||
| 			Colorful:                  true,                      // 彩色打印
 | ||
| 		},
 | ||
| 	)
 | ||
| 	// 初始化会话
 | ||
| 	db, err := gorm.Open(mysql.New(mysql.Config{
 | ||
| 		DSN:                       config.Config.DatabaseUrl,         // DSN data source name
 | ||
| 		DefaultStringSize:         config.Config.DbDefaultStringSize, // string 类型字段的默认长度
 | ||
| 		SkipInitializeWithVersion: false,                             // 根据当前 MySQL 版本自动配置
 | ||
| 	}), &gorm.Config{
 | ||
| 		SkipDefaultTransaction: true, // 禁用默认事务
 | ||
| 		NamingStrategy: schema.NamingStrategy{
 | ||
| 			TablePrefix:   config.Config.DbTablePrefix, // 表名前缀
 | ||
| 			SingularTable: true,                        // 使用单一表名, eg. `User` => `user`
 | ||
| 		},
 | ||
| 		DisableForeignKeyConstraintWhenMigrating: true,   // 禁用自动创建外键约束
 | ||
| 		Logger:                                   logger, // 自定义Logger
 | ||
| 	})
 | ||
| 	if err != nil {
 | ||
| 		log.Fatal("initMysql gorm.Open err:", err)
 | ||
| 	}
 | ||
| 	db.InstanceSet("gorm:table_options", "ENGINE=InnoDB")
 | ||
| 	sqlDB, err := db.DB()
 | ||
| 	if err != nil {
 | ||
| 		log.Fatal("initMysql db.DB err:", err)
 | ||
| 	}
 | ||
| 	// 数据库空闲连接池最大值
 | ||
| 	sqlDB.SetMaxIdleConns(config.Config.DbMaxIdleConns)
 | ||
| 	// 数据库连接池最大值
 | ||
| 	sqlDB.SetMaxOpenConns(config.Config.DbMaxOpenConns)
 | ||
| 	// 连接可复用的最大时间
 | ||
| 	sqlDB.SetConnMaxLifetime(time.Duration(config.Config.DbConnMaxLifetimeSeconds) * time.Second)
 | ||
| 	return db
 | ||
| }
 | ||
| 
 | ||
| func DBTableName(model interface{}) string {
 | ||
| 	stmt := &gorm.Statement{DB: db}
 | ||
| 	stmt.Parse(model)
 | ||
| 	return stmt.Schema.Table
 | ||
| }
 | 
