Golang下的ORM框架-Gorm框架学习记录(2) | 青训营笔记

42 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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)