作为一个被迫转go语言后端渣渣工,在踩坑的道路上一路掉坑和探索。
最近要写一个分页查询,所用的是beego+vue+element。记录一下吧,避免后续又忘了怎么写的。
也是参考了其他人的代码,但是忘了保存那个人了如有看到还可留言 ,我在编辑一下,把大佬加上。
如有问题请指正
话不多说 看代码
pro.go
//分页查询
func GetProListPage( pageSize int ,pageNum int) ([]Oauth2Protocol,int64,error){
o:=orm.NewOrm()
_ = o.Using("default")
var pro =make([]Oauth2Protocol,0)
count,err:=o.Raw("select * from oauth2_protocol ").QueryRows(&pro)
qs:=o.QueryTable("oauth2_protocol") //1获取数据总数
/* qs:=o.QueryTable("Oauth2Mids") //2获取数据总数
count,err := qs.Count()
fmt.Println("count1111111",count)*/
fmt.Println("num111111111111",count) //数据库返回该表数据总条数
// 总页数
pageNum=common.Page(pageSize ,pageNum,count)
//获取分页数据
_,err =qs.Limit(pageSize, pageSize*(pageNum - 1)).All(&pro)
if err!=nil {
beego.Info("err",err)
return pro,count,err
}
beego.Info("查找成功")
return pro,count,err
}
page.go
//各个页面对该段代码的复用较高 我就提取出来了
type PageParam struct {
PageSize int //每页显示多少条
PageNum int //第几页
}
func Page(pageSize int ,pageNu int,count int64)(pageNum int) {
pageCount := math.Ceil((float64(count) / float64(pageSize)))
fmt.Println("总页数pageCount",pageCount)
// 获取当前页码
pageNum= pageNu
fmt.Println("获取当前页码pageNum",pageNum)
if (pageNum== 0|| pageNum== -1){
pageNum = 1
}
return pageNum
}
proController.go
//分页查询
type GetRes struct {
R int `json:"r"`
Total int64 `json:"total"`
Msg []models.Oauth2Protocol `json:"msg"`
//Err error `json:"err"`
}
// @router /getProListPage [post] //注解路由
func (c *ProController) GetProlistPage( pageSize int ,pageNum int ) {
var res GetRes
var pageinfo common.PageParam
var total int64
err := json.Unmarshal((c.Ctx.Input.RequestBody), &pageinfo)
fmt.Println("GetProlistPage", pageinfo.PageSize,pageinfo.PageNum)
proList,total, err := models.GetProListPage(pageinfo.PageSize,pageinfo.PageNum)
if err != nil {
res.R = 400
res.Total=total
res.Msg = proList
fmt.Printf("proList", proList)
c.Response(res)
}
res.R = 200
res.Total=total
res.Msg = proList
fmt.Printf("proList", proList)
c.Response(res)
}
ResponseController.go
//返回结构处理
package controllers
import (
"encoding/json"
"github.com/astaxie/beego"
)
type ResponseController struct {
beego.Controller
}
func (c *ResponseController) Response(msg interface{}){
b,_:=json.Marshal(msg)
beego.Info("return msg",string(b))
c.Data["json"]=msg
c.ServeJSON()
c.StopRun()
}
测试结果: