1.增加
router.go
demo.POST("/userAdd", api.UserController{}.UserAdd)
UserController.go
func (con UserController) UserAdd(c *gin.Context) {
// 获取参数
name := c.PostForm("name")
age, _ := strconv.Atoi(c.PostForm("age"))
sex, _ := strconv.Atoi(c.PostForm("sex"))
data := model.Stu{Name: name, Age: age, Sex: sex}
fmt.Println(data)
res, err := service.CreateUser(&data)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": err,
})
}
c.JSON(200, gin.H{
"id": res,
})
}
service.go
func CreateUser(data *model.Stu) ([]int, error) {
fmt.Println("service", data)
return model.Create(data)
}
model/user.go
func Create(data *Stu) ([]int, error) {
result := Db.Create(data)
if result.Error != nil {
return nil, result.Error
}
var id []int
Db.Raw("select LAST_INSERT_ID() as id").Pluck("id", &id)
return id, result.Error
}
2.删
router.go
demo.DELETE("/userDelete/:id", api.UserController{}.UserDelete)
UserController.go
func (con UserController) UserDelete(c *gin.Context) {
req, _ := strconv.Atoi(c.Param("id"))
res, err := service.DeleteUser(req)
if err != nil {
panic(err)
}
c.String(res, "删除成功%d", res)
}
service.go
func DeleteUser(data int) (int, error) {
return model.Delete(data)
}
model/user.go
func Delete(data int) (int, error) {
var stu Stu
result := Db.Delete(&stu, data)
return 200, result.Error
}
3.改
router.go
demo.PUT("/userUpdate/:id", api.UserController{}.UserUpdate)
UserController.go
func (con UserController) UserUpdate(c *gin.Context) {
req, _ := strconv.Atoi(c.Param("id"))
result := response.GetEmptySuccessRsp()
res, err := service.UpdateUser(req)
if err != nil {
panic(err)
}
c.String(200, "api Update")
}
service.go
func UpdateUser(data int) (interface{}, error) {
return model.Update(data)
}
model/user.go
func Update(data int) (result interface{}, err error) {
var stu Stu
result = Db.Model(&stu).Where("id =?", data).Update("name", "花花")
fmt.Println(result)
return
}
4.查
router.go
demo.GET("/userList", api.UserController{}.UserList)
UserController.go
func (con UserController) UserList(c *gin.Context) {
res := service.UserList()
c.JSON(200, gin.H{
"data": res,
})
}
service.go
func UserList() []model.Stu {
return model.List()
}
model/user.go
func List() []Stu {
var req []Stu
result := Db.Find(&req)
fmt.Println(result)
return req
}
优化列表返回值为{count:0,list:[]}格式
新建entity/response.go文件
package response
// list返回值结构体
type ListRsp struct {
Count int64 `json:"count"`
List interface{} `json:"list"`
}
router.go
demo.GET("/userList", api.UserController{}.UserList)
UserController.go
func (con UserController) UserList(c *gin.Context) {
res := service.UserList()
c.JSON(200, gin.H{
"count": res.Count,
"list": res.List,
})
}
service.go
func UserList() response.ListRsp {
return model.List()
}
model/user.go
func List() response.ListRsp {
var req []Stu
res := response.ListRsp{
Count: result.RowsAffected,
List: req,
}
fmt.Println(result)
return res
}
gorm mysql 方法总结
// 查找主键升序的第一条数据
mysql: SELECT * FROM users ORDER BY id LIMIT 1
gorm: db.First(&user)
// 查找主键升序的最后一条数据
mysql:SELECT * FROM users ORDER BY id DESC LIMIT 1
gorm: db.Last(&user)
// 查找id=10的数据
mysql:SELECT * FROM users WHEREID = 10
gorm: db.First(&user, 10)
// 查找所有数据
mysql:SELECT * FROM users
gorm: db.Find(&user)
// 获取第一条匹配的记录
db.Where("name = ?", "haha").First(&user)
// SELECT * FROM users WHERE name = 'haha' ORDER BY id LIMIT 1;
// 获取全部匹配的记录
db.Where("name <> ?", "haha").Find(&users)
// SELECT * FROM users WHERE name <> 'haha';
问题:尝试本地启动前端和后端,使用本地数据库启动项目,无接口权限报错,发现本地role字段为null。测试环境role中有数据。
总结:了解到项目通过第三方的登录流程 前端去第三方服务器请求user信息,用获取到的user部分信息与后端服务的user信息拼接成完整的用户信息,去请求项目接口。
例如:第三方服务器返回user基本信息,包含工号,姓名,部门等。而role是通过后端数据库获取的,这样可得到完整的user信息为(工号,姓名,部门,角色类型),使用完整的user信息才可访问项目的业务数据接口。