golang 封装db文件

本文介绍了如何使用Golang进行数据库封装,提供了一段代码示例,以便在项目的其他部分轻松调用这些封装好的数据库操作。
摘要由CSDN通过智能技术生成

直接上代码

package global

import (
	"fmt"
	"log"
	"os"
	"time"

	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"shop.serv/utils"
)
var db *gorm.DB

// DB 通用数据库
func DB() *gorm.DB {
	return db
}

func init() {
	db = Conn(Config.Connections)
}

// Conn 连接数据库
func Conn(cfg Connections) *gorm.DB {
	newLogger := logger.New(
		log.New(os.Stdout, "\n", log.LstdFlags),
		logger.Config{
			SlowThreshold: time.Second,
			LogLevel:      logger.Error,
		},
	)
	var dsn string
	var dialector gorm.Dialector
	if cfg.Driver == "mysql" {
		dsn = fmt.Sprintf("%s:%s@(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
			cfg.Username, cfg.Password, cfg.Hostname, cfg.Database)
		dialector = mysql.Open(dsn)
	} else {
		dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=5432 sslmode=disable TimeZone=Asia/Shanghai",
			cfg.Hostname, cfg.Username, cfg.Password, cfg.Database)
		dialector = postgres.Open(dsn)
	}

	db, err := gorm.Open(dialector, &gorm.Config{
		Logger:                 newLogger,
		NamingStrategy:         schema.NamingStrategy{TablePrefix: cfg.Prefix, SingularTable: true},
		SkipDefaultTransaction: true,
	})
	if err != nil {
		log.Fatalln(err)
		return nil
	}
	if Config.Debug {
		db = db.Debug()
	}
	sql, err := db.DB()
	if err == nil {
		sql.SetConnMaxLifetime(time.Duration(time.Second * 86400))
	}
	return db
}

封装完成,在其他地方直接调用就好了
比如:

var user []User
global.DB().Where("1=1").FInd(&user)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile_qcr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值