Gorm使用指南(一) | 青训营

45 阅读3分钟

前言

本文主要内容为Go语言ORM框架GORM的介绍与基础使用。

什么是ORM

ORM全称为对象关系映射(Object-Relational Mapping),用于将对象模型与关系型数据库之间的数据进行映射与转换,从而减少了编写与维护原生SQL语句的工作。它允许开发者在编程中使用面向对象的方式操作数据库,更加优雅。

常见的ORM框架

  • Hibernate (Java): Hibernate 是 Java 社区中最著名的 ORM 框架之一。它允许 Java 开发者以面向对象的方式操作数据库,自动生成 SQL 查询和映射关系。Hibernate 在 Java EE 和 Spring 等框架中得到广泛应用。
  • Django ORM (Python): Django 是 Python 中的一个流行 Web 框架,它自带了一个强大的 ORM 框架。Django ORM 提供了高级的查询、模型关系和事务管理功能。
  • equelize (Node.js): Sequelize 是 Node.js 平台上的 ORM 框架。它支持多种数据库,提供了高级的查询和模型定义功能,使得 Node.js 开发者可以更方便地操作数据库。

Gorm

Golang语言中一款性能极好的ORM库,对开发人员相对是比较友好的。支持MySQL、PostgreSQL、SQLite 等数据库。

快速入门

安装

安装gorm框架与mysql数据库驱动

go get -u gorm.io/gorm 
go get -u gorm.io/driver/sqlite 

连接数据库并配置信息

func Init(cfg *settings.MySQLConfig) (err error) {

        //连接信息
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.User,
		cfg.Password,
		cfg.Host,
		cfg.Port,
		cfg.DBName,
	)
        //配置信息
	mysqlConfig := gorm.Config{
		SkipDefaultTransaction: false,
		//这里可以添加这个gorm的logger
		//Logger: ,
	}
        //开始连接
	db, err = gorm.Open(mysql.Open(dsn), &mysqlConfig)
	if err != nil {
		zap.L().Error("mysql init errr", zap.Error(err))
		panic("warn err!")
	}

	//建表
	initMigrate()
	return
}

关于数据库参数dsn:

  • cfg.User:登录数据库服务器的用户名。
  • cfg.Password”登录数据库服务器的密码。
  • cfg.Host:数据库服务器的 IP 地址,这里是本地地址。
  • cfg.Port:数据库服务器的端口号。
  • cfg.DBName:要连接的数据库的名称。
  • charset=utf8mb4:指定了数据库编码为 utf8mb4,这样可以支持存储中文。
  • parseTime=True:指定了在连接中解析时间类型。
  • loc=Local:指定了时区。

关于MysqlConfig中可以自定义的设置:

  • SkipDefaultTransaction:是否跳过默认的事务处理,默认为否。
  • NamingStrategy:数据库表和列的命名策略,在默认情况下,GORM 会将模型名称转换为复数形式来映射到数据库中的表名。
  • FullSaveAssociations:是否完全保存关联。
  • Logger:自定义日志记录器。
  • NowFunc:自定义“当前时间”函数。
  • DryRun:是否生成 SQL 语句但不执行。
  • PrepareStmt:是否在缓存语句中执行给定的查询。
  • DisableAutomaticPing:是否禁用自动 ping。
  • DisableForeignKeyConstraintWhenMigrating:是否在迁移时禁用外键约束。
  • IgnoreRelationshipsWhenMigrating:是否忽略迁移中的关系。
  • DisableNestedTransaction:是否禁用嵌套事务。
  • AllowGlobalUpdate:是否允许全局更新。
  • QueryFields:是否在查询中使用表的所有字段。
  • CreateBatchSize:默认的批量创建大小。
  • ClauseBuilders:条件生成器。
  • ConnPool:数据库连接池。
  • Dialector:数据库方言。
  • Plugins:已注册的插件。

创建模型

定义模型结构体

type UserInfo struct {
    gorm.Model // 如果需要使用 GORM 提供的内置模型字段(如 ID、CreatedAt、UpdatedAt、DeletedAt),可以嵌入 gorm.Model 结构体

    ID uint
    Name string
    Gender string
    Hobby string
}

其中 gorm:"column:first_name" 标签指定了字段在数据库中的列名,使用 gorm:"unique" 标签指定了 Email 字段在数据库中是唯一的,也可以使用gorm: "primary_key"自定义主键。

创建数据库表

// 自动迁移,根据模型定义创建数据库表 
db.AutoMigrate(&User{})

插入数据

u1 := UserInfo{Name:"小明",Gender:"男",Hobby:"篮球"} 
u2 := UserInfo{Name:"xxn",Gender:"女",Hobby:"写作"} 
db.Create(&u1) 
db.Create(&u2)

查询数据


db.Find(u)`

log.Printf(``"%v\n"``, u)`

var u3 = new(UserInfo)`

db.First(u3)`

log.Printf(``"%v\n"``, u3)`

u4 := &UserInfo{}`
db.Find(u, "name=?""xxn")`
log.Printf("%v\n", u4)`

修改数据


u5 := &UserInfo{}`

db.Model(u5).Where("name=?", "小明").Update("hobby"``, "读书")

删除数据

db.Delete(&UserInfo{})