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

2023-12-14 15:11:25 浏览数 (3)

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)进行许可,使用时请注明出处。


0 人点赞