这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
Gorm框架CURD接口
创建
我们一开始先规定用户信息的数据结构
type UserInfo struct {
UserID int64 `gorm:"column:UserID" json:"id,omitempty"` // 用户id
UserName string `gorm:"column:Name"json:"name,omitempty"` // 用户名称
UserFollowCount int `gorm:"column:FollowCount"json:"follow_count,omitempty"` // 用户关注数
UserFollowerCount int `gorm:"column:FollowerCount"json:"follower_count,omitempty"` // 用户粉丝数
IsFollow bool `gorm:"column:IsFollow"json:"is_follow,omitempty"` // 是否关注
}
func (value UserInfo) TableName() string { // 绑定数据库表
return "UsersInfo"
}
创建一条记录
userInfo := UserInfo{UserID: 1, UserName: "wzh", UserFollowCount: 0, UserFollowerCount: 0, IsFollow: true}
result := db.Create(&userInfo) // 通过数据的指针来创建
user.ID // 返回插入数据的主键
result.Error // 返回 error
result.RowsAffected // 返回插入记录的条数
用指定的字段创建记录
创建记录并更新给出的字段
db.Select("UserID", "UserName", "IsFollow").Create(&userInfo)
// 等价于:
// INSERT INTO `UsersInfo` (`UserID`,`Name`,`IsFollow`) VALUES (1, "wzh", true)
创建记录并更新未给出的字段
db.Omit("UserID", "UserName", "IsFollow").Create(&userInfo)
// 等价于:
// INSERT INTO `UsersInfo` (`FollowCount`,`FollowerCount`) VALUES (0, 0)
查询
Gorm框架提供了 First,Take,Last 方法,方便从目标数据库中检索单个对象(记录)。当查询数据库时,它会自动添加 LIMIT 1 条件,并且没有找到记录时,它会返回 ErrRecordNotFound 错误
// 获取第一条记录(主键升序)
db.First(&userInfo)
// SELECT * FROM UsersInfo ORDER BY UserID LIMIT 1;
// 获取一条记录,没有指定排序字段
db.Take(&userInfo)
// SELECT * FROM UsersInfo LIMIT 1;
// 获取最后一条记录(主键降序)
db.Last(&userInfo)
// SELECT * FROM UsersInfo ORDER BY UserID DESC LIMIT 1;
result := db.First(&userInfo)
result.RowsAffected // 返回找到的记录数
result.Error // returns error
// 检查 ErrRecordNotFound 错误
errors.Is(result.Error, gorm.ErrRecordNotFound)
First、Last 方法会根据主键查找到第一个、最后一个记录, 它仅在通过 struct 或提供 model 值进行查询时才起作用。 如果 model 类型没有定义主键,则按第一个字段排序。
检索全部对象
// 获取全部记录
result := db.Find(&userInfo)
// SELECT * FROM UsersInfo;
result.RowsAffected
// 返回找到的记录数,相当于 `len(users)`
result.Error
// returns error
条件查询
var userInfo UserInfo
err := DB.Select("UserID, Name, FollowCount, FollowerCount, IsFollow")
.Where("UserID = ?", UserID).First(&userInfo).Error
// SELECT UserID,Name,FollowCount,FollowerCount,IsFollow FROM UsersInfo WHERE UserID = 1 ORDER BY UserID LIMIT 1;
Order
指定从数据库检索记录时的排序方式
var commentList []Comment
err := DB.Select("CommentID, UserID, CommentStr, CommentDate")
.Where("VideoID = ?", VideoID).Order("CommentID DESC").Find(&commentList).Error
参考引用:GORM中文文档《GORM 中文文档》 | Go 技术论坛 (learnku.com)