下载框架包
代理
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{}
}
目录结构