目录

Golang |gorm框架认识和使用

在我们平时项目中,面对与日俱增的数据量,还有各种表与字段。仅仅是简单的CRUD增删改查的SQL语句也会相当庞杂。

而Gorm框架是一个经过长时间沉淀的“设计简洁,功能强大,自由拓展的全功能ORM”,在字节内部也广泛使用。作为一个强大的ORM框架,下面将结合课程内容,与常规的dataBase/sql的操作相对比,结合具体例子介绍一下。

Gorm介绍

什么是ORM

要说gorm,那必须说一下什么是ORM。

ORM框架全称是:Object Relational Mapping(对象关系映射)。它的作用是在编程中将面对对象的方法与数据库表的操作对应起来。简而言之就是用面向对象的操作来操作数据库,比如说用对象对应数据库中的表,而字段的CRUD则是对象的各种方法。

ORM有什么好处

ORM相比普通的database/sql操作上更符合编程习惯,直接操作对象而不是使用繁琐的sql语句。

Gorm框架操作

导入gorm包

gorm包:

1
go get gorm.io/gorm

gorm mysql数据库连接池:

1
go get gorm.io/driver/mysql

1. 连接Mysql数据库

database/sql的操作:

1
db,err:=sql.Open("mysql","user:password@tcp(127.0.0.1:3306)/mytest")

gorm的操作:

1
db,err:=gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/hello"))

可以看出来没什么差别,只是gorm和sql不同对象Open连接而已。

2. 数据库CRUD

database/sql中,对数据库的操作围绕着两个函数进行。

  1. Query():表示查询,将会返回数据库获取的一系列行结果。
  2. Exec():表示执行语句。

但无论是哪个函数,都要在函数里直接写sql语句进行操作,如:

1
rows,err:=db.Query("select user_id,username,sex,email from user where user_id = ?",7)

可以看出,如果面对多个模型以及庞杂的增删查改,要写下许多sql语句。既不优雅也不方便。而且容易造成bug,sql语句的正确要在执行阶段才能知道,这给开发造成一定难度。

但gorm框架采用了面向对象的概念来操作数据库,克服了以上的缺点,也让代码保持统一的风格。

1. gorm自动建表

在gorm框架中,可以用 AutoMigrate() 函数自动建表,极其方便。函数会识别结构体的结构,根据结构体结构来生成对应的表结构。无需一个个输入参数,减少了错误的发生,简化操作流程。

!注意:gorm建表会自动在表名后添加’s’ ,比如说user的表名就叫users

1
2
3
4
5
6
7
8
type User struct {
	ID uint
	Name string
	Email string
	Age uint8
}

db.AutoMigrate(&User{})

2. gorm增删查改

  1. 增加
1
2
user:=User{ID:1,Name:"zhangsan",Email: "user01@123.com",Age: 18}
result:=db.Create(&user)

可以发现,相比于sql代码,使用Create方法减少了编码错误的可能。 2. 查询

1
2
var user User
db.First(&user,"Name=?","zhangsan")
  1. 更新
1
db.Model(&user).Updata("Age",20)
  1. 删除
1
db.Delete(&user, 1)

总结

可以发现,gorm框架作为一个迭代多年的orm框架有很高的可用性和易用性,相比database/sql更加的方便,大大减少了代码错误的概率。其丰富的特性也让数据库的操作更灵活。