阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

golang通过mysql语句实现分页查询

53次阅读
没有评论

共计 1988 个字符,预计需要花费 5 分钟才能阅读完成。

导读 golang 通过 mysql 语句实现分页查询。
1. 前端接口调用

golang 通过 mysql 语句实现分页查询

2.register 访问入口
// 查询一个用户下所有的 subnet
ws.Route(ws.GET("/subnets").
To(sc.ListSubnet).
Doc("List subnets authorized to the login user.").
Param(ws.QueryParameter(query.ParameterPage, "page").Required(false).DataFormat("page=%d").DefaultValue("page=1")).
Param(ws.QueryParameter(query.ParameterLimit, "limit").Required(false)).
Returns(http.StatusOK, api.StatusOK, api.ListResult{}))
3. 解析参数
// 查询某个用户下所有的 subnet 信息
func (v *SubController) ListSubnet(request *restful.Request, response *restful.Response) {username := request.Attribute(filters.UserName).(string)
 
subnetService := &service.SubnetService{}
query := query.ParseQueryParameter(request)
result, err := subnetService.ListSubnet(query, v.Db, username)
if err != nil {api.HandleError(response, request, err)
return
}
response.WriteEntity(result)
}

golang 通过 mysql 语句实现分页查询

4.service 实现
// 查询一个用户所有的 subnet 信息
func (ss *SubnetService) ListSubnet(query *query.Query, db *sql.DB, userName string) (*api.ListResult, error) {sm := mapper.NewSubnetMapper(db)
sb, err := sm.SearchAllByUserName(query, userName)
return sb, err
}
5.mapper 实现
// 查询用户下的所以信息
func (s *SubnetMapper) SearchAllByUserName(query *query.Query, userName string) (*api.ListResult, error) {totalRow, err := s.Db.Query("SELECT COUNT(*) from t_subnet ,t_vpc where t_vpc.id = t_subnet.vpcid and username = ?", userName)
if err != nil {klog.Error("query orders count error", err)
return nil, err
}
total := 0
for totalRow.Next() {
err := totalRow.Scan(&total,)
if err != nil {klog.Error("query orders count error", err)
continue
}
}
totalRow.Close()
 
rows, err := s.Db.Query(SearchAllByUserNameSql, userName, query.Pagination.Limit, query.Pagination.Offset)
defer func() {
if rows != nil {rows.Close()
}
}()
if err != nil {klog.Error("query subnet error", err)
return nil, err
}
items := make([]interface{}, 0)
for rows.Next() {ss := new(vpc.SubnetItem)
err = rows.Scan(&ss.VpcName, &ss.VpcNetwork, &ss.SubnetName, &ss.SubnetNetwork, &ss.CreateTime)
items = append(items, *ss)
}
return &api.ListResult{
TotalItems: total,
Items: items,
}, nil
}

可以看到第一步查出了所有 count 数目:
golang 通过 mysql 语句实现分页查询

查询语句加上参数。控制查到的页数。

golang 通过 mysql 语句实现分页查询
返回的是总数量跟当前查询页。

特殊情况用不到数据库分页的,就需要用到内存分页了.

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1988字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中