这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天 本次笔记将一步一步演示Gorm的操作
Gorm
安装
终端下载gorm
go get -u github.com/jinzhu/gorm
go get -u gorm.io/driver/mysql
如用其他数据库就在mysql那里替换
连接数据库
-
dsn的配置:
username:password@tcp(host:port)/Dbname?charset=utf8&parseTime=True&loc=Local 数据库账号:数据库密码@tcp(数据库连接地址:数据库端口)/数据库名?charset=utf8mb4&parseTime=True&loc=Local
在workbench内:
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "root:admin@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, conErr := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if conErr != nil {
panic("连接数据库失败")
}
println(db)
println("连接数据库成功")
}
构建模型
数据库test有个名为user的表,表中有 ID,Name,Age,Email 4个属性。 因此,我需要在项目中构建一个与其相同结构的结构体,如下两图:
在idea中,我创建了一个entity(实体)的目录,专门用于存放与表对应的实体。
User文件中有一个User结构体,字段对应表中属性。
该文件还有一个TableName方法,用于告诉gorm这个对应的是数据库中的user表
插入
创建一个User的对象,通过db.Create(user)来执行插入
//插入
user := entity.User{
ID: 1,
Name: "_kukuku",
Email: "kukuku1128@qq.com",
Age: 1,
}
res := db.Create(user)
if res.Error != nil {
panic("插入失败")
}
println("插入成功")
创建数组或切片users,通过db.Create(users)来执行批量插入
var users = []entity.User{{ID: 999, Name: "kukuku999"}, {ID: 998, Name: "kukuku998"}, {ID: 997, Name: "kukuku997"}}
res := db.Create(users)
if res.Error != nil {
panic("插入一组失败")
}
println("插入一组成功")
这里仅仅是把插入操作移到了controller文件里的Insert、InsertSeveral函数内
查询
-
按主键升序查询第一条记录
db.First(user)
-
查询所有
db.Find(user)
-
根据条件查询
db.Where("条件=?", id).Find(user) 根据id查询:db.Where("ID=?", id).Find(user)
更新
更新单个列
db.Model(存储返回的数据).Where("条件=?", "?的值").Update("改变的属性", 改变的值)
db.Model(user).Where("Name=?", "kukuku999").Update("ID", 123)
更新语句只会在user中修改你所更新的值,其他值不会改变
更新多列
db.Model(user).Where("Name=?", "_kukuku").Updates(entity.User{Age: 21, Email: "961919375@qq.com"})
注意是updates!
删除
db.Where("ID=?", 997).Delete(user)