GORM实践 | 青训营

67 阅读2分钟

GORM 简介

GORM是GO语言中的ORM框架,ORM(Object Relational Mapping)为对象关系映射。

GORM的使用

安装

使用以下命令进行安装

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

连接数据库

db, err := gorm.Open(sqlite.Open("test.db", &gorm.Config{}))
if err != nil {
    panic("failed to connect database")
}

gorm可以支持不同的数据库,这里使用的是SQLite数据库,也可以使用Mysql,SQLServer, PostgreSQL等。如果需要连接其他数据库,改变gorm.Open传入的参数即可

创建gorm model

定义个结构体,即为gorm model,每个gorm model对应数据库里的一张表,字段对应表中的每一列。

type User struct {
    Name string
    Age uint
}

创建数据

一般使用db.Create进行数据创建,create支持创建一条数据和多条数据。创建一条数据时传入一个对象,创建多条数据时传入一个切片。

db.Create(&User{Name:"Alice", Age:"25"}) //创建一条
users := []*User{{Name:"Bob", Age:"20"}, {Name:"Carol", Age:"23"}}
db.Create(users) //创建多条

查询数据

可以使用First,但是First只能用于查询一条数据,而且查询不到数据会返回ErrRecordNotFound

var user User
db.First(&user, 1)
db.First(&user, "name = ?", "Alice")

Find用于查询多条数据,查询不到数据不会返回错误

results := make([]*User, 0)
db.Where("age > 20").Find(&results)

更新数据

使用updata指令,可以更新单个列,也可以更新多个列

db.Model(&user).Update("Name", "Person")

需要注意的是如果使用结构体更新属性,只会更新非零值的字段,如果想更新零值,需要使用map

删除数据

使用delete进行删除

db.Delete(&User{}, 1)

一般使用Delete时,实现的是物理删除,如果想进行软删,要在结构体里增加gorm.DeletedAt,之后使用Unscoped可以查询到被软删的数据

个人思考

这篇文章记录了使用GORM框架进行数据库的连接和实现增删改查操作。本文中只是对每种操作进行了举例,没有列举出全部的可以实现增删改查的方法,更多的实现方法还需要之后的学习和探索。