Golang 创建web服务 gin+xorm

 下载框架包

代理
go env -w GOPROXY=https://goproxy.cn,direct
gin 框架
go get -u github.com/gin-gonic/gin
mysql驱动
go get -u github.com/go-sql-driver/mysql
xorm
go get xorm.io/xorm

构建web服务,查询数据库 

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"got_demo2/src/web"
	"xorm.io/xorm"

	//"got_demo2/src/web"
)

type DpxdataMachineEquipment struct {
	Id         int    `xorm:"pk Id"`
	OwnerName   string `xorm:"owner_name"`
	OwnerPhone  string `xorm:"owner_phone"`
	EquipmentId string `xorm:"equipment_id"`
}

type DpxdataMachineHomework struct {
	CalcArea string `xorm calc_area`
	ValidArea string `xorm valid_area`
	WorkProvince string `xorm work_province`
	WorkCity string `xorm work_city`
	WorkPrefecture string `xorm work_prefecture`
	Rate string
	Year string
}


type QueryEquipmentInfo struct {
	OwnerName  string `form:"ownerName"`
	OwnerPhone string `form:"ownerPhone"`
}

// TableName 需要重写表明映射
func (DpxdataMachineEquipment) TableName() string {
	//方法一:指定数据库表名称为users
	return "dpxdata_machine_equipment"
}
func (DpxdataMachineHomework) TableName() string {
	//方法一:指定数据库表名称为users
	return "dpxdata_machine_homework"
}

func main() {
	var (
		userName string = ""
		password string = ""
		ipAddress string = ""
		port int =
		bdName string = ""
		//charset string = "ust8"
	)
	dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", userName, password, ipAddress, port, bdName)
	fmt.Println(dataSourceName)
	// 创建数据库链接
	db, err := xorm.NewEngine("mysql", dataSourceName)
	if err != nil {
		fmt.Println("链接数据库失败")
	}

	// Http Web 服务
	server := gin.Default()

	/**
	创建Post请求
	param1:请求路径
	param2:请求对应实现的方法,*gin.Context 请求上下文
	BindJSON: 获取请求Body
	 */
	server.POST("/query", func(context *gin.Context) {
		var equipmentIdList []string
		var queryModel QueryEquipmentInfo
		err := context.BindJSON(&queryModel)
		if err != nil {
			fmt.Println("获取数据失败", err)
		}

		// 通过姓名、手机号查询设备
		db.SQL("select DISTINCT equipment_id as equipment_id from dpxdata_machine_equipment "+
			"where owner_name = ? and owner_phone = ?", queryModel.OwnerName, queryModel.OwnerPhone).Find(&equipmentIdList)
		var homeworkList []DpxdataMachineHomework
		// 通过设备列表查询作业信息 映射表对象时,as需要用表字段
		db.Select("left(homework_date, 4) as year, work_province ," +
			"work_city, " +
			"work_prefecture, " +
			"ROUND(sum(calc_area), 2) as calc_area, " +
			"ROUND(sum(valid_area), 2) as valid_area , " +
			"ROUND(valid_area/ calc_area, 2) as rate ").In("equipment_id", equipmentIdList).GroupBy("left(homework_date, 4), work_province, work_city, work_prefecture").Find(&homeworkList)

		fmt.Println(homeworkList)

		//context.JSON(200, &web.Response{Code: 1, Message: "查询成功", Data: homeworkList})
		// 原生Sql查询的数据以字符串返回
		//result, err := db.QueryString("select * from dpxdata_machine_equipment limit 10")

		// 查询一个对象
		//var equipment DpxdataMachineEquipment
		//db.Where("owner_name=?","杜振涛").Get(&equipment)

		//var equipment []DpxdataMachineEquipment
		// 查询列表对象
		// db.Where("owner_name=?","杜振涛").And("equipment_id=?", "10004d6e").Find(&equipment)
		// 原生Sql查询,返回对象
		//db.SQL("select * from dpxdata_machine_equipment limit 10").Find(&equipment)
		context.JSON(200, web.Response{Code: 1, Message: "查询成功", Data: homeworkList})

	})
	server.Run()

}

web.Response 实体对象

package web    


type Response struct {
	Code int
	Message string
	Data interface{}
}

目录结构

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值