Go语言框架之GORM使用(一) | 青训营

143 阅读3分钟

大家好啊,今天来点大家想看的东西。

Gorm的使用入门

基本介绍

想要了解GORM,首先要知道ORM是什么东西。ORM是Object Relational Mapping的缩写,即是“对象关系映射”。具体实践来看就是用一个类来表示一张表,类中的属性即为表的字段,类的每一个实例即为对应表的一个记录,因此有了ORM,我们便可以通过操作类来实现对数据库实现增删改查,其效率往往比手动编写SQL语句要高,而且也能防御一些SQL注入问题。

不同的语言一般有着自己独属的ORM框架,例如python就有DjangoORM,java有Hibernate Mybatis。而GO语言便是GORM。

从[GORM官方文档](GORM Guides | GORM - The fantastic ORM library for Golang, aims to be developer friendly.)能了解GORM的基本使用,也能明白其特性(英语苦手痛苦)

数据库链接

本文基于mysql来讲解如何用GORM进行数据库的链接。 首先我们当然需要安装GORM和mysql的驱动。

go get gorm.io/driver/mysql
go get gorm.io/gorm

然后我们就可以使用gorm.Open和mysql.Open进行数据库的连接啦。

// Configure MySQL connection parameters  
username := "root"   //账号  
password := "123456" //密码  
host := "127.0.0.1"  //数据库地址,可以是Ip或者域名  
port := 3306         //数据库端口  
Dbname := "doyin"    //数据库名  
timeout := "10s"     //连接超时,10秒  
  
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)  

db, err := gorm.Open(mysql.Open(dsn))

其中dsn是对Mysql数据连接的配置。

如果对性能有要求,我们也可以在gorm.Open中添加对GORM的设置。例如跳过默认的事务,为了保证数据的一致性,GORM会在事务中进行对数据库的增删改查操作,如果你在实践中并不需要,可以将它禁用以获得性能的提升。

db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  SkipDefaultTransaction: true,
})

除此之外,我们通过同样的方式修改表的命名策略,日志记录,最大连接数量等设置。 具体如下.

// Config GORM config
type Config struct {
	//跳过默认事务
	SkipDefaultTransaction bool
	// 命名策略,可以定义表名,列表等生成规则
	NamingStrategy schema.Namer
	// 在创建或更新时,是否更新关联数据
	FullSaveAssociations bool
	// 日志接口,用于实现自定义日志
	Logger logger.Interface
	// 创建时间使用的函数
	NowFunc func() time.Time
	// 生成 SQL 但不执行,可以用于准备或测试生成的 SQL
	DryRun bool
	// 是否禁止创建 prepared statement 并将其缓存
	PrepareStmt bool
	// 禁止去ping数据库,检测是否可用
	DisableAutomaticPing bool
	// 是否禁止自动创建外键约束
	DisableForeignKeyConstraintWhenMigrating bool
	// 是否禁止嵌套事务
	DisableNestedTransaction bool
	// 是否允许全局update/delete
	AllowGlobalUpdate bool
	// 执行查询时,是否带上所有字段
	QueryFields bool
	// 默认批量插入大小
	CreateBatchSize int
}

模型定义

定义数据库中的一张表需要使用Go中的struct自定义数据类型。例如

type Student struct {
  ID    uint   
  Name  string
  Address *string
}

其中我们将Address属性设为字符串指针,是为了能够传递空值nil。并且,需要注意的是,结构体中的所有属性必须要首字母大写,如果是小写的话是不会生成字段的。

定义好表的结构后,我们可以采用gorm中的AutoMigrate来自动生成表。其意思即为自动迁移。用于刷新数据库中表格的定义,使其永远保持最新状态。其会自动创建新的表,外键,约束和索引,修改列的类型。并且不会删除未使用的列,保证不丢失数据。

例如,将上面定义的结构体中的ID属性修改为IDD,再一次进行迁移,你的表将会添加一列IDD字段。

如果你有特殊需求,也可以采用gorm中的Migrate接口,来实现自定义的数据迁移。