IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> go 反向创建表结构+原生sql查询及数据读取+范型的使用 -> 正文阅读

[大数据]go 反向创建表结构+原生sql查询及数据读取+范型的使用

反向创建表结构

什么时候需要反向创建表?
先有数据库表,需要创建结构与数据库表建立关联的时候,需要基于数据库表来反向生成表结构。
工具库(需要安装):gormt

安装命令
go get -u https://github.com/xxjwxc/gormt

在这里插入图片描述

./gormt --help
or
./gormt -h

-------------------------------------------------------
base on gorm tools for mysql database to golang struct

Usage:
  main [flags]

Flags:
  -d, --database string   数据库名
  -f, --foreign           是否导出外键关联
  -F, --fun               是否导出函数
  -g, --gui               是否ui显示模式
  -h, --help              help for main
  -H, --host string       数据库地址.(注意-H为大写)
  -o, --outdir string     输出目录
  -p, --password string   密码.
      --port int          端口号 (default 3306)
  -s, --singular          是否禁用表名复数
  -b, --table_names string 表名称  
  -l, --url string        url标签(json,url)
  -u, --user string       用户名.

生成命令

// 更加详细可以参考上面的命令
go/bin/gormt -H=ip -d=database -p=pwd -u=username --port=3306 -F=false -b table_name1,table_name2...

原生sql查询及数据读取

// err := DB.Raw(sql, args...).Scan(&res).Error
sql := `SELECT c.name as name,SUM(d.num) as total from (SELECT id,num,time from d WHERE time BETWEEN ? AND ?) d INNER JOIN (SELECT id,name,k from c) c on d.id=c.id GROUP BY DAY(d.time),d.id ORDER BY d.time;`
err := DB.Raw(sql, todayStart, todayStop).Scan(&res).Error

范型的使用

刚接触go不久,想到不一定会用,然后去查资料,go的范型好像是刚出来的,看得似懂非懂,不是很会用,就照葫芦画瓢。还真被我搞懂了。
为什么会想到使用范型?
因为上面数据查询,有一个统计的需求,每查一张表实现一个函数,代码写得有点臃肿,因为大部分代码都是一样的,就是查询的表不一样和返回的结果的结构不一样,其他的都一样。想到了把整部份代码封装起来,但是返回的结果结构不能写死,需要视具体情况而定,那么就需要用一个不定类型参数来处理这样的问题,就想到了范型。

// res 就是 所说的范型
func Statistics[T any](context *gin.Context, DB *gorm.DB, sql string, claim string, res []T) {
	today := time.Now().Add(-time.Hour * 24)
	todayStart := today.Format("2006-01-02") + " 00:00:00"
	todayStop := today.Format("2006-01-02") + " 23:59:59"
	err := DB.Raw(sql, todayStart, todayStop).Scan(&res).Error
	if err != nil {
		// 加一个 日志对象, 把错误信息打印到日志里。
		fmt.Println(err)
		return
	}
	b, _ := json.Marshal(res)
	bStr := string(b)
	// 把双引号去掉
	bStr = strings.ReplaceAll(bStr, "\"", "")
	msg := todayStart + " ~ " + todayStop + claim + bStr
	uitls.SendMsg(msg)
	data := gin.H{
		"resList":    res,
		"len":        len(res),
		"todayStart": todayStart,
		"todayStop":  todayStop,
	}
	response.Response(context, 200, data, "查询结果!")
}

// 调用
var res []model.MyStruct
Statistics[model.MyStruct](context, DB, sql, claim, res)

补充

反引号 `` 有点折磨人
在字符串拼接的时候,最好还是把双引号去掉。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:42:19  更:2022-05-18 17:45:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:06:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码