使用 GORM(Go 的 ORM 库)实现增删改查 | 青训

前言

Gorm是一个受欢迎的Go语言ORM库,它以简洁、强大和灵活的方式提供数据库操作功能。它的目标是简化数据库操作,使开发人员能够更专注于业务逻辑,而不必过多关注底层的SQL语句和数据库细节。Gorm具有许多优势,例如自动建表、钩子函数和数据库查询等功能,这些都受到开发者的喜爱。特别值得一提的是,目前正在快速开发的gorm/gen工具能够减少Gorm中一些冗余的语句,并避免一些安全漏洞,比如注入攻击。今天给大家分享我使用GORM的部分心得。

数据库的初始化连接

只使用Gorm,我们无法与对应的数据库建立连接,我们需要对应的数据库驱动。例如,我们的数据是Mysql,则我们需要先安装gorm.io/driver/mysql作为我们的连接驱动

我们可以通过以下方式,建立一个数据库连接:

golang
复制代码
import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

此处的DNS连接需要修改为自己的用户名和密码以及目标地址和对应的数据库架构名称。 我们可以注意到后面还跟上了一些参数,其中parseTime=True是为了能够正确的处理Golang中的time.Time类型。

上述代码中,在使用Gorm打开一个数据库连接时,我们还可以进行一些自定义的设置,例如超时时长、超时重试、位置最大的连接数等。

数据表的自动创建与模型声明

我们可以通过在Golang中声明一个结构体,用于Gorm与识别并自动在数据库中创建数据表。其通过tag标签对数据的每一字段进行详细的定义。

golang
复制代码
type Records struct {
	UID   []byte   `gorm:"column:uid;primaryKey"`
	UA    string `gorm:"column:ua"`
	IP    string `gorm:"column:ip"`
	CTime time.Time  `gorm:"column:ctime"`
}

func (ButtonClickRecords) TableName() string {
	return "click_records"
}

我们声明了一个叫做Records的结构体,并有四个成员。 每个成员后都跟随了一个tag声明,例如UID成员,在gorm执行操作时,就会认为,字段名叫做uid并且是一个主键。

默认情况下,Gorm会根据结构体的名称自动去寻找对应的数据表名称,但我们也可以通过重写对应结构体的TableName方法,指定特定的数据表名称。

记录的创建

我们首先新建一个对象示例,然后通过create方法创建,以上面的结构体为例:

golang
复制代码
records := []*Records{    
    User{UID:[]byte("1-1"), UA: "test", IP:"test", CTime: time.Now()},
    User{UID:[]byte("1-2"), UA: "test2", IP:"test2", CTime: time.Now()}, 
    }  
result := db.Create(users) 

他会自动创建两条记录在数据表中

如果数据表中存在自增主键,则我们可以不指定他,在创建完成后,Goem会自动的通过指针,在创建的对应的示例中给主键赋值,即数据表中的自增主键的数据内容

记录的删除

我们可以通过下面的代码,实现数据的删除,并填入实例中

golang
复制代码
record := User{}
db.Where("UA = ?", "test").Delete(&email)

记录的更新

我们可以通过下面的示例,将数据更新。Gorm会自动根据主键判断需要更新的内容

golang
复制代码
db.Save(&record)

记录的查询

我们可以通过下面的示例,进行数据的查询

golang
复制代码
// 获取第一条记录(主键升序)
db.First(&record)

// 获取一条记录,没有指定排序字段
db.Take(&record)

// 获取最后一条记录(主键降序)
db.Last(&record)

总结

通过Gorm库,我们可以轻松地与数据库进行交互,实现数据的增删改查操作。Gorm提供了简洁的API和自动化的功能,可以减少开发人员编写重复、繁琐的SQL语句的工作量,提高开发效率。此外,Gorm还支持钩子函数、事务操作、复杂查询等高级功能,增加了开发人员的灵活性和可扩展性。在使用Gorm时,需要遵守数据表的命名规范、字段的定义方式和使用规则,以避免不必要的问题。

全部评论

相关推荐

活泼的柠檬精:简历问题有点多,加v细聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务