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
对象来完成。以下是一个示例:
db := db.DB() // 获取底层数据库连接
db.SetConnTimeout(time.Second * 30) // 设置连接超时时间为30秒
在上面的示例中,通过调用SetConnTimeout
方法,你可以动态设置连接超时的时间。
GORM 打印 SQL 语句
2.1 使用日志模式
在 Gorm 中,你可以使用 gorm.Config
结构体中的 Logger
字段来配置日志记录,通过设置 LogMode
为 LogModeSQL
来输出 SQL 语句。以下是一个简单的示例:
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)进行许可,使用时请注明出处。