Go语言数据库编程:GORM 的基本使用

GORM 是 Go 语言最流行的 ORM 框架,封装了 database/sql,支持自动迁移、关联关系、事务等功能,开发体验接近于高层语言的 ORM。


一、安装与初始化

1. 安装 GORM 及数据库驱动
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
# PostgreSQL 用户:
# go get -u gorm.io/driver/postgres
2. 建立数据库连接
package main

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

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/gormdb?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        log.Fatal("连接数据库失败:", err)
    }

    log.Println("连接成功")
}

二、定义模型结构体

type User struct {
    ID       uint   `gorm:"primaryKey"`
    Name     string
    Email    string `gorm:"uniqueIndex"`
    Age      int
    CreatedAt time.Time
}
  • • 使用 GORM 标签配置字段属性。
  • • 支持自动创建 idcreated_at 等字段。

三、自动迁移表结构

db.AutoMigrate(&User{})

✅ 会自动创建表,如果表存在则进行字段比对与升级(非破坏性)。


四、基本 CRUD 操作

1. 新增数据
user := User{Name: "Alice", Email: "[email protected]", Age: 25}
db.Create(&user)
fmt.Println("新ID:", user.ID)
2. 查询数据
var user User
db.First(&user, 1)                         // 主键查询
db.First(&user, "email = ?", "[email protected]") // 条件查询
  • • First:查询一条
  • • Find:查询多条
  • • Where 支持链式调用:
var users []User
db.Where("age > ?", 20).Order("age desc").Limit(10).Find(&users)
3. 更新数据
db.Model(&user).Update("Name", "Alice Updated")
db.Model(&user).Updates(User{Name: "NewName", Age: 28}) // 多字段
4. 删除数据
db.Delete(&user)

五、条件构造器

GORM 支持各种链式条件语句:

db.Where("name LIKE ?", "%alice%").Find(&users)
db.Where("age BETWEEN ? AND ?", 20, 30).Find(&users)
db.Not("name = ?", "Bob").Find(&users)

六、钩子函数(Hooks)

你可以定义方法拦截模型的创建、更新、删除行为:

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
    u.Name = "【新建】" + u.Name
    return
}

七、事务处理

err := db.Transaction(func(tx *gorm.DB) error {
    if err := tx.Create(&User{Name: "TxUser"}).Error; err != nil {
        return err
    }
    if err := tx.Delete(&User{}, 1).Error; err != nil {
        return err
    }
    return nil
})

八、日志与调试

GORM 支持 SQL 日志:

import "gorm.io/gorm/logger"

db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{
    Logger: logger.Default.LogMode(logger.Info),
})

九、常用配置项

配置 说明
CreateFirstFindDeleteUpdate 基础 CRUD
WhereOrderLimitOffset 链式构造条件
AutoMigrate 自动建表/更新表结构
Model(&Model{}) 设置操作对象

十、小结

功能 示例
创建表 db.AutoMigrate(&User{})
插入 db.Create(&user)
查询 db.Firstdb.Where().Find
更新 db.Model().Updates()
删除 db.Delete(&user)
事务 db.Transaction(func)

你可能感兴趣的:(golang,数据库,开发语言)