大家好啊,今天来点大家想看的东西。
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接口,来实现自定义的数据迁移。