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

news/2024/7/5 7:32:22
golang通过mysql语句实现分页查询。

1.前端接口调用

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)
}

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数目:

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


返回的是总数量跟当前查询页。

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


http://lihuaxi.xjx100.cn/news/281193.html

相关文章

惠斯通电桥信号调理芯片_用惠斯通电桥测电阻

用惠斯通电桥测电阻的原理惠斯通电桥电路如下图所示,此电路常用来测量电阻Rx,且精度较高。测量原理:先将电键S闭合,然后调节电阻箱R3,使灵敏电流表G的读数为零,这时,电路中B、D两点的电势相等--…

Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制

简介采用openresty 开发出的api网关有很多,比如比较流行的kong、orange等。这些API 网关通过提供插件的形式,提供了非常多的功能。这些组件化的功能往往能够满足大部分的需求,如果要想达到特定场景的需求,可能需要二次开发&#x…

遗传算法求解几何问题

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达作者 | Victor Sim 编译 | VK 来源 | Towards Data Science我最近看了一个关于“令人难以置信的直觉人工智能发明”的ted演讲:https://www.ted.com/talks/maur…

简单聊聊Golang中defer预计算参数

在golang当中defer代码块会在函数调用链表中增加一个函数调用,下面这篇文章主要给大家介绍了关于Golang中defer预计算参数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 什么是defer defer用来声明一个延迟函数,把这个函数放入到一个栈上&#…

【unity HoloLens2】触碰了物体但没反应,触碰了一次却调用多次,HoloLens2的touch触发机制探究

【unity HoloLens2】触碰了物体但没反应,触碰了一次却调用多次,HoloLens2的touch触发机制探究 开发项目时发现,有时候触碰了物体却没有触发touch事件,有时候触碰了一次物体,却触发了两次事件,经过测试发现…

600页!分享珍藏很久的《推荐系统学习手册》(附链接)

这是之前学习推荐系统时的学习资料,非常全面,包含经典模型的解析及代码实现、模型的评估、最新工业界论文解读等等,全网仅此一份!该手册有PDF版本和Markdown版本,总计有600多页!资料领取方式:1.…

轻松应对Java试题,这是一份大数据分析工程师面试指南

作者 | HappyMint转载自大数据与人工智能(ai-big-data)导语:经过这一段时间与读者的互动与沟通,本文作者发现很多小伙伴会咨询面试相关的问题,特别是即将毕业的小伙伴,所以决定输出一系列面试相关的文章。本…

flash写保护原理_STM32系统中的2种数据掉电保护方法!

在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加&#xff…