这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
一、重点内容:
1.1 知识要点有哪些?
- GORM及设计原理
- ConnlPool
- Dialector
二、详细知识点介绍:
2.1 GORM及设计原理
GORM(Go Object-Relational Mapping)是一个应用在Go语言中的对象关系映射器,它可以将Go代码映射到关系型数据库。GORM帮助我们定义结构体(Schema definitions)、加载记录(Query records)、定义和维护这些记录(CRUD operations)。GORM可以根据我们的视图和模型结构自动构建SQL查询,并将结果映射回Go结构体。
当要使用GORM时,首先需要定义Go结构体,该结构体将根据关系型数据库表模型进行映射。然后,我们可以执行CRUD(创建、读取、更新、删除)操作来操作数据库记录,而无需手动编写SQL查询。GORM有多种方法可以帮助我们完成当前的任务,例如Find()、Where()、Create()、Save()等。其中,Find()方法可以查询符合条件的一条记录;Create()方法可以在数据库中创建一条新的记录;where()方法可以查询字段中符合条件的记录;Save()方法可以保存符合条件的记录。此外,GORM也支持预处理语句,关联模型、缓存、事务等功能。
GORM的设计原理是将Go语言结构体和关系型数据库中的表模型进行映射,并使用Golang代码来操作数据库。GORM内部使用了Map、Struct、Interface以及内部钩子函数,可实现对象模型的动态构建,从而实现Go和关系型数据库之间的映射。
2.2 ConnlPool
ConnPool是GORM中的连接池模块,它可以根据配置自动创建一个线程安全的连接池,以供多线程并发访问数据库。它支持连接空闲超时、最长存活时间、连接释放策略等特性,可以帮助程序优化性能,提高数据库连接使用率,减少数据库开销,降低事务竞争等问题。
2.3 Dialector
Dialector是GORM中的数据库驱动模块,它可以根据数据库配置信息自动创建一个Database对象,以对指定数据库进行操作。Dialector支持MySQL、PostgreSQL、SQLite、Oracle、MSSQL、本地文件存储等多种数据库,并且可以在不同的环境下使用,包括本地、云、容器和虚拟机,使用也相当简便,仅需要传入数据库配置信息即可完成。Dialector还支持Go语言的反射功能,可以自动扫描Go结构体,然后映射到数据库表中。它拥有丰富的文档和API,可以帮助开发人员快速搭建可扩展的Web应用程序。
三、实践练习例子:
使用GORM的简单代码示例:
// 导入相关的包
import (
"github.com/jinzhu/gorm"
"fmt"
)
// 定义数据库表的Go结构体
type User struct {
Id int
Name string
Age int
}
// 连接数据库
db, err := gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local")
// 查询符合条件的一条记录
user := User{}
db.Where("name = ? and age = ?", name, age).Find(&user)
// 在数据库中创建一条新记录
db.Create(&User{Name: "John", Age: 18})
// 更新满足条件的记录
db.Model(&User{}).Where("name = ?", "John").Update("age", 20)
// 删除满足条件的记录
db.Where("name = ?", "John").Delete(&User{})
fmt.Println("Done!")
四、个人总结:
Go语言提供了一个有效的工具来连接数据库,GORM。GORM是Go语言的对象关系映射器,它可以帮助开发人员更轻松地访问数据库,而且支持多种数据库,包括MySQL、PostgreSQL、MongoDB等。它可以搭建可扩展的Web应用程序,并提供丰富的文档和API。此外,Dialector也可以模拟数据库,帮助开发人员在不使用数据库的情况下测试应用程序。