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框架进行数据库的连接和实现增删改查操作。本文中只是对每种操作进行了举例,没有列举出全部的可以实现增删改查的方法,更多的实现方法还需要之后的学习和探索。