前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GORM 使用记录:配置链接超时、输出SQL语句

GORM 使用记录:配置链接超时、输出SQL语句

原创
作者头像
孟斯特
发布2023-12-14 15:11:25
8400
发布2023-12-14 15:11:25
举报
文章被收录于专栏:code人生code人生

1. GORM 配置连接超时

1.1 配置连接超时

在建立数据库连接时,你可以设置连接超时。这可以在GORM的初始化过程中完成。以下是一个示例:

代码语言:go
复制
import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
    ConnectTimeout: 30 * time.Second, // 设置连接超时时间为30秒
})

在上面的示例中,通过设置ConnectTimeout字段,你可以指定连接超时的时间。

1.2 运行时配置超时

除了在初始化数据库连接时设置超时外,你还可以在运行时动态配置超时。这可以通过使用GORM的DB对象来完成。以下是一个示例:

代码语言:go
复制
db := db.DB() // 获取底层数据库连接
db.SetConnTimeout(time.Second * 30) // 设置连接超时时间为30秒

在上面的示例中,通过调用SetConnTimeout方法,你可以动态设置连接超时的时间。

GORM 打印 SQL 语句

2.1 使用日志模式

在 Gorm 中,你可以使用 gorm.Config 结构体中的 Logger 字段来配置日志记录,通过设置 LogModeLogModeSQL 来输出 SQL 语句。以下是一个简单的示例:

代码语言:go
复制
package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
)

func main() {
	dsn := "user:password@tcp(localhost:3306)/dbname?parseTime=true"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info), // 设置为 LogModeSQL 以输出 SQL 语句
	})

	if err != nil {
		log.Fatal(err)
	}

	// 在这里执行你的 Gorm 操作

	// 记得关闭数据库连接
	sqlDB, _ := db.DB()
	sqlDB.Close()
}

上述代码中的 LogMode(logger.Info) 将日志级别设置为 Info,这会输出 SQL 语句。你可以根据需要选择其他日志级别。在执行 Gorm 操作的过程中,相关的 SQL 语句将被记录到你指定的 logger(在这里是默认 logger),从而实现输出 SQL 语句的效果。

2.2 使用 Debug 模式

代码语言:go
复制
db := db.Debug() // 开启调试模式,打印生成的SQL语句
var result []User // 假设你要查询的用户表名为User
db.Find(&result) // 执行查询操作,此时会打印生成的SQL语句到控制台

2.3 使用Callback函数:

除了使用上面的两种方式外,你还可以使用GORM提供的Callback函数来打印生成的SQL语句。你可以在回调函数中获取到生成的SQL语句并打印出来。以下是一个示例:

代码语言:go
复制
db := db.Callback().Query().Before("gorm:query").Register("gorm:print_query", func(db *gorm.DB) {
    fmt.Println(db.Statement.SQL.String()) // 打印生成的SQL语句
})

在上面的示例中,我们通过注册一个回调函数gorm:print_query,在执行查询操作之前打印生成的SQL语句。你可以根据需要调整回调函数的名称和位置,以及输出格式等。

请注意,上述方法仅适用于GORM的查询操作。对于其他操作(如插入、更新、删除等),你需要相应地调整回调函数的位置和名称。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. GORM 配置连接超时
    • 1.1 配置连接超时
      • 1.2 运行时配置超时
      • GORM 打印 SQL 语句
        • 2.1 使用日志模式
          • 2.2 使用 Debug 模式
            • 2.3 使用Callback函数:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档