在我们平时项目中,面对与日俱增的数据量,还有各种表与字段。仅仅是简单的CRUD增删改查的SQL语句也会相当庞杂。
而Gorm框架是一个经过长时间沉淀的“设计简洁,功能强大,自由拓展的全功能ORM”,在字节内部也广泛使用。作为一个强大的ORM框架,下面将结合课程内容,与常规的dataBase/sql的操作相对比,结合具体例子介绍一下。
Gorm介绍
什么是ORM
要说gorm,那必须说一下什么是ORM。
ORM框架全称是:Object Relational Mapping(对象关系映射)。它的作用是在编程中将面对对象的方法与数据库表的操作对应起来。简而言之就是用面向对象的操作来操作数据库,比如说用对象对应数据库中的表,而字段的CRUD则是对象的各种方法。
ORM有什么好处
ORM相比普通的database/sql操作上更符合编程习惯,直接操作对象而不是使用繁琐的sql语句。
Gorm框架操作
导入gorm包
gorm包:
go get gorm.io/gorm
gorm mysql数据库连接池:
go get gorm.io/driver/mysql
1. 连接Mysql数据库
database/sql的操作:
db,err:=sql.Open("mysql","user:password@tcp(127.0.0.1:3306)/mytest")
gorm的操作:
db,err:=gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/hello"))
可以看出来没什么差别,只是gorm和sql不同对象Open连接而已。
2. 数据库CRUD
database/sql中,对数据库的操作围绕着两个函数进行。
- Query():表示查询,将会返回数据库获取的一系列行结果。
- Exec():表示执行语句。
但无论是哪个函数,都要在函数里直接写sql语句进行操作,如:
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
type User struct {
ID uint
Name string
Email string
Age uint8
}
db.AutoMigrate(&User{})
2. gorm增删查改
- 增加
user:=User{ID:1,Name:"zhangsan",Email: "user01@123.com",Age: 18}
result:=db.Create(&user)
可以发现,相比于sql代码,使用Create方法减少了编码错误的可能。 2. 查询
var user User
db.First(&user,"Name=?","zhangsan")
- 更新
db.Model(&user).Updata("Age",20)
- 删除
db.Delete(&user, 1)
总结
可以发现,gorm框架作为一个迭代多年的orm框架有很高的可用性和易用性,相比database/sql更加的方便,大大减少了代码错误的概率。其丰富的特性也让数据库的操作更灵活。