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

Written by

in

文章目录
  • type User struct { ID uint `gorm:”primaryKey”` Name string Email string `gorm:”uniqueIndex”` Age int CreatedAt time.Time } • 使用 GORM 标签配置字段属性。 • 支持自动创建 id、created_at 等字段。
  • db.AutoMigrate(&User{}) ✅ 会自动创建表,如果表存在则进行字段比对与升级(非破坏性)。
  • GORM 支持各种链式条件语句: db.Where(“name LIKE ?”, “%alice%”).Find(&users) db.Where(“age BETWEEN ? AND ?”, 20, 30).Find(&users) db.Not(“name = ?”, “Bob”).Find(&users)
  • 你可以定义方法拦截模型的创建、更新、删除行为: 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), })
  • 配置 说明 Create, First, Find, Delete, Update 基础 CRUD Where, Order, Limit, Offset 链式构造条件 AutoMigrate 自动建表/更新表结构 Model(&Model{}) 设置操作对象
  • 功能 示例 创建表 db.AutoMigrate(&User{}) 插入 db.Create(&user) 查询 db.First, db.Where().Find 更新 db.Model().Updates() 删除 db.Delete(&user) 事务 db.Transaction(func) 到此这篇关于Go语言数据库编程:GORM 的基本使用的文章就介绍到这了,更多相关Go语言GORM使用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: GO中GORM 使用教程 Golang使用gorm实现分页功能的示例代码 Go语言中ORM框架GORM使用介绍 Golang 使用gorm添加数据库排他锁,for update Go语言中使用gorm小结
  • 目录
    • 一、安装与初始化
      • 1. 安装 GORM 及数据库驱动
      • 2. 建立数据库连接
    • 二、定义模型结构体
      • 三、自动迁移表结构
        • 四、基本 CRUD 操作
          • 1. 新增数据
          • 2. 查询数据
          • 3. 更新数据
          • 4. 删除数据
        • 五、条件构造器
          • 六、钩子函数(Hooks)
            • 七、事务处理
              • 八、日志与调试
                • 九、常用配置项
                  • 十、小结

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

                    go get -u gorm.io/gorm
                    go get -u gorm.io/driver/mysql
                    # PostgreSQL 用户:
                    # go get -u gorm.io/driver/postgres

                    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{})

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

                    user := User{Name: "Alice", Email: "alice@example.com", Age: 25}
                    db.Create(&user)
                    fmt.Println("新ID:", user.ID)

                    var user User
                    db.First(&user, 1)                         // 主键查询
                    db.First(&user, "email = ?", "alice@example.com") // 条件查询
                    • • First:查询一条
                    • • Find:查询多条
                    • • Where 支持链式调用:
                    var users []User
                    db.Where("age > ?", 20).Order("age desc").Limit(10).Find(&users)

                    db.Model(&user).Update("Name", "Alice Updated")
                    db.Model(&user).Updates(User{Name: "NewName", Age: 28}) // 多字段

                    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)

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

                    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)

                    到此这篇关于Go语言数据库编程:GORM 的基本使用的文章就介绍到这了,更多相关Go语言GORM使用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

                    您可能感兴趣的文章:

                    • GO中GORM 使用教程
                    • Golang使用gorm实现分页功能的示例代码
                    • Go语言中ORM框架GORM使用介绍
                    • Golang 使用gorm添加数据库排他锁,for update
                    • Go语言中使用gorm小结

                    站内搜索