go中api请求,mysql数据库分页模糊查询

package main

import (
	"encoding/json"
	"errors"
	"fmt"
	"github.com/gorilla/mux"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"io/ioutil"
	"log"
	"net/http"
	"time"
)


//TODO
//日志初始化
//db初始化

// gorm.Model 的定义
/*type Model struct {
	ID        uint           `gorm:"primaryKey"`
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt gorm.DeletedAt `gorm:"index"`
}*/


type AiAlertRule struct {
	//gorm.Model
	Id string `gorm:"column:id",json:"id"`
	UserName string `gorm:"column:user_name",json:"user_name"`
	GroupName string `gorm:"column:group_name",json:"group_name"`
	Role string `gorm:"column:role",json:"role"`
	Editor string `gorm:"column:editor",json:"editor"`
	RuleName string `gorm:"column:rule_name",json:"rule_name"`
	RuleType string `gorm:"column:rule_type",json:"rule_type"`
	RuleStatus string `gorm:"column:rule_status",json:"rule_status"`
	RuleConfirm string `gorm:"column:rule_confirm",json:"rule_confirm"`
	Instance string `gorm:"column:instance",json:"instance"`
	CreateTime time.Time `gorm:"column:create_time",json:"create_time"`
	UpdateTime time.Time `gorm:"column:update_time",json:"update_time"`
	Clusterid string `gorm:"column:clusterid",json:"clusterid"`
}


//实现 Tabler 接口来更改默认表名
/*type Tabler interface {
	TableName() string
}
// TableName 会将 AiAlertRule 的表名重写为 `ai_alert_rule`
func (AiAlertRule) TableName() string {
	return "ai_alert_rule"
}*/


//分页封装
/*func Paginate(page int,pageSize int) func(db *gorm.DB) *gorm.DB {
	return func (db *gorm.DB) *gorm.DB {
		if page <= 0 {
			page = 1
		}
		if pageSize <= 0 {
			pageSize = 2
		}
		offset := (page - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}*/



func requestRes(writer http.ResponseWriter, request *http.Request)  {

	//连接数据库
	dsn := "root:root@tcp(10.166.15.26:3306)/test26?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

	if err !=nil {
		fmt.Println("connect false")
	}
	//fmt.Println(db)
	//fmt.Println(err)


	//获取请求数据request
	var req map[string]interface{}
	body, _ := ioutil.ReadAll(request.Body)

	//解码函数
	//解析json编码的数据并将结果存入req指向的值
	json.Unmarshal(body, &req)
	//fmt.Println(req)


	//var name string = req["name"].(string)
	ruleName := req["ruleName"].(string)
	ruleType := req["ruleType"].(string)
	ruleStatus := req["ruleStatus"].(string)
	//fmt.Println(RuleType)
	//fmt.Println(RuleStatus)


	//数据响应response,RuleName输入为空时
	//var res map[string]string = map[string]string{"code": "1", "message": "ok", "body":"hello,world!"}
	//var res = map[string]string{"code": "1", "message": "ok", "body":"hello,world!"}
	//var res = map[string]string{}
	if ruleName == "" {
		res1 := map[string]string{ "message":"RuleName null input"}
		response, _ := json.Marshal(res1)

		writer.Header().Set("Content-Type", "application/json")
		writer.WriteHeader(http.StatusOK)
		writer.Write(response)
		return
	}


	//RuleName输入不为空时
	//var aar AiAlertRule
	var aars []AiAlertRule

	page := int(req["page"].(float64))
	pageSize := int(req["pageSize"].(float64))
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 {
		pageSize = 2
	}

	//查询全部
	//result := db.Find(&aars)
	//模糊查询
	//db.Table("ai_alert_rule").Find(&aars)
	result := db.Table("ai_alert_rule").Offset((page - 1) * pageSize).Limit(pageSize).Where("rule_name LIKE ? and rule_type = ? and rule_status = ?", "%"+ruleName+"%",ruleType,ruleStatus).Find(&aars)
	//.Limit().Offset()
	fmt.Println(aars)
	//result := db.Where("rule_name LIKE ?", "%"+RuleName+"%").Find(&aars)
	//fmt.Println(aars)
	//fmt.Println(result.RowsAffected) // 返回找到的记录数
	//fmt.Println(result.Error)        // returns error or nil
	// 检查 ErrRecordNotFound 错误
	errors.Is(result.Error, gorm.ErrRecordNotFound)

	//defer db.close()

	response, _ := json.Marshal(aars)

	writer.Header().Set("Content-Type", "application/json")
	//writer.WriteHeader(http.StatusOK)
	writer.Write(response)
	/*for i := range aars {
		res := map[string]AiAlertRule{"data":aars[i]}
		编码函数
		response, _ := json.Marshal(res)

		writer.Header().Set("Content-Type", "application/json")
		//writer.WriteHeader(http.StatusOK)
		writer.Write(response)
	}*/





}

func main() {

	//util.InitLogger()
	//方式二:使用mux框架
	//var r *mux.Router = mux.NewRouter()
	r := mux.NewRouter()
	r.HandleFunc("/v1/rule/get_rule", requestRes).Methods("POST")

	log.Fatal(http.ListenAndServe(":9090", r))


}

postman前端输入如下:

{
	"ruleName":"serverless",
	"ruleType":"system_serverless",
	"ruleStatus":"1",
	"page":1,
    "pageSize":2
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值