1.前端接口调用

#yyds干货盘点#golang通过mysql语句实现分页查询_sql

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{}))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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)
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

#yyds干货盘点#golang通过mysql语句实现分页查询_sql_02

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
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

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
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

可以看到第一步查出了所有count数目,

#yyds干货盘点#golang通过mysql语句实现分页查询_分页_03

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

#yyds干货盘点#golang通过mysql语句实现分页查询_数据库分页_04

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

特殊情况用不到数据库分页的,就需要用到内存分页了,下期小编给大家讲解内存分页。

如果这篇文章帮到了你,希望你可以帮小编投投票,47号峰啊疯了,投完可以抽奖哦

 ​https://blog.51cto.com/blog-contest/index#part4​

#yyds干货盘点#golang通过mysql语句实现分页查询_sql_05

#yyds干货盘点#golang通过mysql语句实现分页查询_数据库分页_06