首页 > 其他分享 >原生分页接口

原生分页接口

时间:2023-10-28 10:12:31浏览次数:34  
标签:原生 分页 int House 接口 json page string size

package main

import (
	"encoding/json"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"math"
	"net/http"
	"strconv"
)

// 封装接口返回的三要素:1状态 2提示 3数据

type ApiResponse struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

// 结构体

type House struct {
	Id      int     `json:"id"`
	Name    string  `json:"name"`
	Price   float64 `json:"price"`
	Address string  `json:"address"`
	Cate    string  `json:"cate"`
	Img     string  `json:"img"`
}

// 分页结构体

type PageData struct {
	House     []House `json:"house"`
	Count     int     `json:"count"`
	TotalPage int     `json:"total_page"`
	Prev      int     `json:"prev"`
	Next      int     `json:"next"`
}

// 自定义表名

func (House) TableName() string {
	return "house"
}

// 分页接口

func Page(w http.ResponseWriter, r *http.Request) {
	//连接数据库

	dsn := "root:root@tcp(127.0.0.1:8889)/2110a"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		result := ApiResponse{500, "数据库连接失败", ""}
		json.NewEncoder(w).Encode(result)
	}
	//1.总数
	var count int64
	db.Model(House{}).Count(&count)

	//2.每页显示条数
	size, _ := strconv.Atoi(r.URL.Query().Get("size"))
	if size == 0 {
		size = 5
	}
	//3.总页数
	totalPage := int(math.Ceil(float64(count) / float64(size)))

	//4.当前页
	page, _ := strconv.Atoi(r.URL.Query().Get("p"))
	if page == 0 {
		page = 1
	}
	//5.偏移量
	offset := (page - 1) * size

	// 分页查询

	var house []House
	db.Model(House{}).Limit(size).Offset(offset).Find(&house)

	//上一页
	prev := page - 1
	if prev < 1 {
		prev = 1
	}
	//下一页
	next := page + 1
	if next > totalPage {
		next = totalPage
	}

	pageData := PageData{
		House:     house,
		Count:     int(count),
		TotalPage: totalPage,
		Prev:      prev,
		Next:      next,
	}
	// 返回接口数据
	result := ApiResponse{
		Code:    200,
		Message: "success",
		Data:    pageData,
	}
	json.NewEncoder(w).Encode(result)

}

func main() {
	http.HandleFunc("/api/page", Page)
	http.ListenAndServe("localhost:8080", nil)
}

  

标签:原生,分页,int,House,接口,json,page,string,size
From: https://www.cnblogs.com/superzwb/p/17793712.html

相关文章

  • json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码
    json对象属性的输出顺序测试,fastJson有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则fastJson会根据对象的字段的首字母来排序。而jackson,gson是根据对象的类中定义的属性的代码中的先后顺序输出。不会排序。针对业务场景需要对接口中对象存在集合列表等,需要......
  • 原生微信小程序有什么好的ui框架?
    对于原生微信小程序的UI框架,以下是一些常见的选择:1.WeUI:WeUI是一套详尽且易于扩展的UI组件库,它提供了丰富的组件,如按钮、表单、导航等,适合快速开发小程序。2.VantWeapp:VantWeapp是有赞前端团队推出的一款优秀的小程序UI框架,它提供了丰富的组件和工具,支持九宫格、导航、表单、弹......
  • Python 接口自动化 —— requests框架
    1.前言Python内置的urllib模块,也可以用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。因此我们使用requests模块进行进行接口测试。requests官方文档资料地址:http://cn.python-requests.org/zh_CN/latest/2.环境安装cmd(win+R快捷键)输入:pipinstall......
  • API商品数据接口调用爬虫实战
    随着互联网的发展,越来越多的商家开始将自己的商品数据通过API接口对外开放,以供其他开发者使用。这些API接口可以提供丰富的商品数据,包括商品名称、价格、库存、图片等信息。对于爬虫开发者来说,通过调用这些API接口,可以更加便捷地获取商品数据,避免了爬取网页数据的繁琐过程。本文将......
  • http-template实现原生分页
     packagemainimport( "gorm.io/driver/mysql" "gorm.io/gorm" "html/template" "io" "math" "net/http" "os" "strconv")//商品结构体typeGoodsstruct{ Idint......
  • Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件
    一、Springboot简介springboot是当下最流行的web框架,SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,让这些框架集成在一起变得更加简单,简化了我......
  • API - 几种API接口模式 - RESTful、WebSocket、GraphQL、gRPC、Webhook
    总结TODO.....当思考使用哪种API接口时,你将会面临一个重要的决策。RESTful、GraphQL、gRPC、WebSocket和Webhook是当前流行的几种API接口模式。在本文中,我们将介绍这些接口的特点、用途和比较,帮助你选择最适合你应用程序需求的接口。引言随着现代应用程序的复杂性和用户期望的......
  • Java继承 多线程的实现方式——利用 Callable 接口 和 Future 接口方式实现
    利用Callable接口和Future接口方式实现:这种实现方式可以获取到多线程运行的结果 步骤:1.创建一个类,类名比如叫MyCallable,并实现 Callable接口  注:Callable接口有一个泛型,因为这种方式可以获取到多线程运行的结果,泛型就表示结果的类型2.重写 Callable接口里面......
  • Java基础 多线程的实现方式——实现 Runnable 接口的方式进行实现
    实现Runnable接口的方式进行实现:1.定义一个类实现 Runnable接口,并实现run方法2.在run方法里面书写该线程要执行的代码3.然后创建这个实现 Runnable接口的类的实例化对象,这个对象其实就表示多线程要执行的任务4.再去创建一个Thread类的对象,然后把 实现 R......
  • 直播软件源码,java数据分页几种方式
    直播软件源码,java数据分页几种方式1.使用PageUtils Service: /**   *分页查询   *   *@paramparams查询条件   *@returnPageUtils   */  PageUtilsqueryPage(Map<String,Object>params);   ServiceImpl: Page<数据库对象实体>pa......