1.Gorm增删改查
package main
import (
"fmt"
"gorm.io/driver/mysql" // 导入 MySQL 驱动
"gorm.io/gorm" // 导入 GORM
)
type User struct { // 定义 User 结构体
gorm.Model // 继承 GORM 模型结构体,包含 ID、CreatedAt、UpdatedAt、DeletedAt 字段
Name string
Age int
}
func main() {
// 1. 连接 MySQL 数据库
dsn := "root:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
defer db.Close() // 程序结束时关闭数据库连接
// 2. 自动迁移数据表
db.AutoMigrate(&User{}) // 自动创建数据表
// 3. 插入数据
user := User{Name: "Tom", Age: 18}
result := db.Create(&user) // 插入数据
if result.Error != nil {
panic("failed to create user")
}
fmt.Println(user.ID) // 输出新插入数据的 ID
// 4. 查询数据
var users []User
db.Find(&users) // 查询所有数据
fmt.Println(users)
var user2 User
db.First(&user2, 1) // 根据主键查询单条数据
fmt.Println(user2)
var user3 User
db.Where("name = ?", "Tom").First(&user3) // 根据条件查询单条数据
fmt.Println(user3)
// 5. 更新数据
db.Model(&user).Update("Age", 20) // 更新数据
fmt.Println(user)
// 6. 删除数据
db.Delete(&user) // 删除数据
}
这里的 dsn 是连接 MySQL 数据库的字符串,其中包含了用户名、密码、主机地址、端口号、数据库名等信息,需要根据实际情况进行修改。同时,这里使用了 GORM 的链式查询语法,通过 db.Find() 和 db.Where() 方法来查询数据,可以根据实际需求进行修改。
2.&gorm.Config{}配置
&gorm.Config{}是GORM库中的一个结构体,用于配置GORM的行为。它提供了一系列选项,可以控制GORM如何处理数据库连接、日志记录、表名规则、模型定义等方面的行为。
要使用&gorm.Config{},需要在创建GORM数据库连接时将其作为选项传递给Open函数。例如:
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
// 处理错误
}
在上面的例子中,&gorm.Config{}作为第二个参数传递给了Open函数,表示使用默认的配置选项。如果需要自定义一些选项,则可以在&gorm.Config{}中设置相应的字段值,例如:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TablePrefix: "prefix_", // 表名前缀
SingularTable: true, // 表名使用单数形式
},
Logger: logger.Default.LogMode(logger.Info), // 日志记录器
})
在上面的例子中,我们自定义了表名前缀和表名使用单数形式的命名规则,并且启用了Info级别的日志记录器。当然,还有很多其他选项可以设置,具体可以参考GORM文档。