gorm的简单使用

本文详细介绍了如何使用 GORM 框架在 Go 语言中连接 MySQL 数据库并进行 CRUD 操作。从数据库连接配置开始,展示了如何创建表、保存数据、查询、修改和删除记录。同时,还演示了自定义列名、条件查询等高级功能,是 Go 开发者进行数据库操作的实用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、连接到数据库
(1) MySQL
import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
  // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情	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{})
}	//想要正确的处理 time.Time ,需要带上 parseTime=true 参数
(2) 自定义驱动(自己导入对应的数据库驱动器)
import (
  _ "example.com/my_mysql_driver"
  "gorm.io/gorm"
)

db, err := gorm.Open(mysql.New(mysql.Config{
  DriverName: "my_mysql_driver",
  DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local", 
}), &gorm.Config{})
二、CRUD接口
(1) 创建

1、通过创建Gorm.Model模块(结构体),映射对应变量

//默认列名为变量名
type User struct{
    gorm.Model
    Name string `gorm:"varchar(10);not null"`
    Age int `gorm:"int"`
    
}//gorm在数据库创建数据表时,使用蛇形小写命名,如UserName->user_name

// 自定义列名

type User struct {
    gorm.Model
    Name string `gorm:"column:username"`
    Age int `gorm:"column:age"`
}

  1. 自动创建表及保存数据

    //1.1 自动在数据库下创建表名为users数据表
    db.AutoMigrate(&User{})	
    //1.2 自定义表名
    db.Table("user_information").CreateTable(&User{})
    //2. 保存数据
    NewUser := User{
        Name: "Tony",
        Age: 18,
    }
    db.Save(&NewUser)
    
(2)查询
// 1.1 查询"name"为"Tony"的用户,并用result捕获整个结构体
result := User{}
//	得到第一个满足条件的数据
db.Where("name = ?", "Tony").First(&result)
//	得到所有满足条件的数据
db.Where("name <> ?", "Tony").Find(&users)

// 用IN查询
db.Where("name IN ?", []string{"name1", "name2"}).Find(&results)

// 用LIKE查询
db.Where("name LIKE ?", "%To%").Find(&results)

// 用AND查询
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&results)

// 使用结构体查询
db.Where(&User{Name: "jinzhu", Age: 0}).Find(&reults)

(3)修改
db.Where("name = ?", NewUser.Name).First(&NewUser)
NewUser.Name = "Tom"
db.Save(&NewUser)
// 将NewUser的Name修改成"Tom"
(4)删除
db.Delete(&NewUser)  // 为软删除,将字段中"deleted_at"设为当前时间,在数据库中仍存在该调数据
### GORM 使用指南与示例代码解析 #### 1. **GORM 基础概念** GORM 是一款专为 Go 语言设计的强大 ORM 框架,提供全功能的 ORM 支持,包括关联关系、事务处理、嵌套事务等特性[^2]。它的目标是成为开发者友好的工具库,帮助简化数据库交互过程。 --- #### 2. **安装 GORM** 在使用 GORM 之前,需要先通过 `go get` 安装依赖包: ```bash go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite # SQLite 驱动为例 ``` --- #### 3. **初始化 GORM 实例** 以下是一个完整的 GORM 初始化流程,展示了如何连接数据库并创建模型实例[^4]: ```go package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) // 定义模型结构体 type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"size:255"` Email string `gorm:"uniqueIndex;size:255"` CreatedAt time.Time } func main() { // 连接 SQLite 数据库 db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 自动迁移模式 err = db.AutoMigrate(&User{}) if err != nil { fmt.Println(err) return } // 创建记录 user := User{Name: "Alice", Email: "alice@example.com"} result := db.Create(&user) if result.Error != nil { fmt.Println(result.Error) } else { fmt.Printf("Created user with ID %d\n", user.ID) } // 查询第一条记录 var firstUser User db.First(&firstUser) fmt.Printf("First user's name is %s\n", firstUser.Name) } ``` --- #### 4. **常用操作** ##### (a) **创建记录** 可以通过 `Create()` 方法向数据库中插入一条新记录[^4]: ```go db.Create(&User{Name: "Bob", Email: "bob@example.com"}) ``` ##### (b) **查询记录** 利用 `First()` 或者其他条件查询方法获取指定记录[^4]: ```go var user User db.Where("name = ?", "Alice").First(&user) fmt.Println(user.Email) ``` ##### (c) **更新记录** 支持多种方式更新已有数据[^2]: ```go db.Model(&user).Update("Name", "Charlie") ``` ##### (d) **删除记录** 通过主键或其他唯一字段删除对应的数据项[^2]: ```go db.Delete(&User{}, user.ID) ``` --- #### 5. **高级特性** ##### (a) **分表插件** 对于大规模数据存储需求,可以借助 GORM 的分表插件实现水平扩展[^1]。例如,在初始化过程中加入分表逻辑: ```go plugin := sharding.NewPlugin( sharding.WithKeyFunc(func(model interface{}) string { u := model.(*User) return strconv.Itoa(int(u.ID%10)) // 简单取模算法 }), ) db.Use(plugin) ``` ##### (b) **ClickHouse 插件** 针对特殊场景(如 OLAP 分析),可引入 ClickHouse 插件以增强性能[^3]: ```go type Event struct { Timestamp time.Time `gorm:"column:timestamp"` Value float64 `gorm:"column:value"` } db.Table("events").Create(&Event{Timestamp: time.Now(), Value: 123.45}) ``` --- #### 6. **文档资源** 官方文档提供了详尽的功能说明和技术细节,建议深入阅读以便更好地掌握 GORM 的强大功能: - [GORM 官方文档](https://gorm.io/zh_CN/docs/) - [GitHub 地址](https://github.com/go-gorm/gorm) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值