Go语言之ORM(对象关系映射)库详解

作者:

文章目录
  • 全功能 ORM 支持主流数据库:MySQL、PostgreSQL、SQLite、SQL Server 等。 通过结构体(Struct)映射数据库表,自动处理数据类型转换。 链式 API 提供流畅的链式调用方法,例如: db.Where(“name = ?”, “jinzhu”).First(&user) 自动迁移 可根据模型自动创建或更新数据库表结构: db.AutoMigrate(&User{}) 关联支持 简化一对多、多对多等关联关系操作: type User struct { gorm.Model CreditCards []CreditCard // 一对多 } 事务与钩子 支持数据库事务。 提供 BeforeSave、AfterCreate 等生命周期钩子。 查询构建器 支持复杂查询、预加载(Preload)、原生 SQL 等。
  • 原仓库已归档:原作者 Jinzhu 已停止维护 gorm(v1 版本),并推荐使用新版 gorm.io/gorm(即 GORM v2)。 GORM v2 改进: 性能优化。 支持上下文(Context)。 更清晰的 API 设计。
  • package main import ( “gorm.io/gorm” “gorm.io/driver/sqlite” ) type User struct { gorm.Model Name string Age int } func main() { db, err := gorm.Open(sqlite.Open(“test.db”), &gorm.Config{}) if err != nil { panic(“连接数据库失败”) } // 自动迁移 db.AutoMigrate(&User{}) // 创建记录 db.Create(&User{Name: “Alice”, Age: 30}) // 查询 var user User db.First(&user, “name = ?”, “Alice”) }
  • 适合:需要快速开发、避免手写 SQL 的场景。 不适合:对性能极致要求或需高度定制化 SQL 的情况(可搭配原生 database/sql 使用)。
  • 如果你是新项目,建议直接使用 GORM v2。 学习资源:官方文档(含中文)详细,社区活跃,适合快速上手 ORM 开发。 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Go语言数据库编程GORM 的基本使用详解 Golang如何用gorm实现分页的功能 Golang开发使用gorm时打印SQL语句方式 GORM框架实现分页的示例代码
  • 目录
    • 核心特点
    • 状态与替代方案
    • 基本使用示例
    • 何时选择 GORM?
    • 总结

    github.com/jinzhu/gorm 是 Go 语言中一个非常流行的 ORM(对象关系映射)库,用于简化与关系型数据库的交互。

    以下是关于它的关键信息:

    全功能 ORM

    • 支持主流数据库:MySQL、PostgreSQL、SQLite、SQL Server 等。
    • 通过结构体(Struct)映射数据库表,自动处理数据类型转换。

    链式 API

    提供流畅的链式调用方法,例如:

    db.Where("name = ?", "jinzhu").First(&user)
    

    自动迁移

    可根据模型自动创建或更新数据库表结构:

    db.AutoMigrate(&User{})
    

    关联支持

    简化一对多、多对多等关联关系操作:

    type User struct {
        gorm.Model
        CreditCards []CreditCard // 一对多
    }
    

    事务与钩子

    • 支持数据库事务。
    • 提供 BeforeSaveAfterCreate 等生命周期钩子。

    查询构建器

    • 支持复杂查询、预加载(Preload)、原生 SQL 等。

    原仓库已归档:原作者 Jinzhu 已停止维护 gorm(v1 版本),并推荐使用新版 gorm.io/gorm(即 GORM v2)。

    GORM v2 改进

    • 性能优化。
    • 支持上下文(Context)。
    • 更清晰的 API 设计。

    package main
    
    import (
        "gorm.io/gorm"
        "gorm.io/driver/sqlite"
    )
    
    type User struct {
        gorm.Model
        Name string
        Age  int
    }
    
    func main() {
        db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
        if err != nil {
            panic("连接数据库失败")
        }
    
        // 自动迁移
        db.AutoMigrate(&User{})
    
        // 创建记录
        db.Create(&User{Name: "Alice", Age: 30})
    
        // 查询
        var user User
        db.First(&user, "name = ?", "Alice")
    }
    

    • 适合:需要快速开发、避免手写 SQL 的场景。
    • 不适合:对性能极致要求或需高度定制化 SQL 的情况(可搭配原生 database/sql 使用)。

    • 如果你是新项目,建议直接使用 GORM v2
    • 学习资源:官方文档(含中文)详细,社区活跃,适合快速上手 ORM 开发。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

    您可能感兴趣的文章:

    • Go语言数据库编程GORM 的基本使用详解
    • Golang如何用gorm实现分页的功能
    • Golang开发使用gorm时打印SQL语句方式
    • GORM框架实现分页的示例代码

    站内搜索