Gin之GORM 查询语句

前期工作可以看之前的(连接数据库;以及确定要操作的库)

Gin之GORM 操作数据库(MySQL)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_72264240/article/details/134948202?spm=1001.2014.3001.5502这次我们操作gin库下的另外一个表mysqll表

1、创建路由和控制器以及固定操作表

1、控制器操作

mysqlcontroller.go:

package adminimport ("gindemo04/models""net/http""github.com/gin-gonic/gin"
)type MysqlController struct {// Create a new instance of the BaseController structBaseController
}
func (con MysqlController) Index(c *gin.Context) {}

2、创建路由

package routersimport ("gindemo04/controllers/admin""gindemo04/middle""github.com/gin-gonic/gin"
)func AdminRoutersInit(r *gin.Engine) {//middlewares.InitMiddleware中间件adminRouters := r.Group("/admin", middle.InitMiddleware){adminRouters.GET("/mysqll",admin.MysqlController{}.Index)}
}

 3、固定表

package modelstype Mysqll struct{  //默认操作的是mysqlls这个表Id intMaster stringServant stringRealFeature string
}func (Mysqll) TableName() string {return "mysqll"
}

前期操作完成

2、开始进行操作

查询 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.icon-default.png?t=N7T8https://gorm.io/zh_CN/docs/query.html

1、查询全部数据

	//1、查询全部数据// This function is used to return the index page of the application//先搞一个数据库的切片mysqlList := []models.Mysqll{}//查询数据库数据models.DB.Find(&mysqlList)c.JSON(http.StatusOK, gin.H{"result": mysqlList,})

2、查询一条数据方法

方法一:
	mysqlList1 := []models.Mysqll{}models.DB.Where("id = ?", 1).Find(&mysqlList1)c.JSON(http.StatusOK, gin.H{"result": mysqlList1,})

 方法二:

mysqlResult := models.Mysqll{Id: 2}models.DB.Find(&mysqlResult)c.JSON(http.StatusOK, gin.H{"result": mysqlResult,})

 3、where 方法详细查询

3.1、查询id大于3的数据

mysqlList3 := []models.Mysqll{}
models.DB.Where("id > ?", 3).Find (&mysqlList3)
c.JSON(http.StatusOK, gin.H{"id>3的是": mysqlList3,
})

3.2、查询id大于1 小于3的数据

// var a =1
// var b =3
//这样修改需要大于小于的即可(未操作)
mysqlList4 := []models.Mysqll{}
models.DB.Where("id > ? and id < ?", 1, 3).Find(&mysqlList4)
c.JSON(http.StatusOK, gin.H{"id>1 and id < 3": mysqlList4,
})

3.3、查询为1,3,4的数据

mysqlList5 := []models.Mysqll{}
models.DB.Where("id in (?)", []int{1, 3, 4}).Find(&mysqlList5)
c.JSON(http.StatusOK, gin.H{"id in (1,3,4)": mysqlList5,
})

3.4、使用like模糊查询servant内包含”r“的数据 

mysqlList6 := []models.Mysqll{}
models.DB.Where("servant like ?", "%r%").Find (&mysqlList6)
c.JSON(http.StatusOK, gin.H{"servant like %r%": mysqlList6,
})

3.5、使用between and 查询id在1,4直接的数据 

mysqlList7 := []models.Mysqll{}
models.DB.Where("id between ? and ?", 1, 4).Find(&mysqlList7)
c.JSON(http.StatusOK, gin.H{"id between 1 and 4": mysqlList7,})

 3.6、Or 查询id=2 或者 id=3的数据

方法一:
mysqlList8 := []models.Mysqll{}
models.DB.Where("id = ? or id = ?", 2, 3).Find(&mysqlList8)
c.JSON(http.StatusOK, gin.H{"id = 2 or id = 3": mysqlList8,
})

方法二:加个4
mysqlList9 := []models.Mysqll{}
models.DB.Where("id =?", 2).Or("id = ?", 3).Or("id = ?", 4).Find(&mysqlList9)
c.JSON(http.StatusOK, gin.H{"id = 2 or id = 3 or id = 4": mysqlList9,
})

4、使用Select指定返回的字段

mysqlLIst10 := []models.Mysqll{}
models.DB.Select("id,servant").Find(&mysqlLIst10)
c.JSON(http.StatusOK, gin.H{"id,servant": mysqlLIst10,
})

注意:如果需要只显示这两个,需要从新定义一个结构体,只有这两个字段且需要重新搞tablename指定

5、Order排序 、Limit 、Offset(order可以写多个;desc倒序) 

//limit限制取的数据数量
//offset 偏移量,确定跳过的数据量(通常和limit配合使用,完成分页(跨越)操作)
mysqlList11 := []models.Mysqll{}
models.DB.Order("id desc").Limit(2).Offset(1).Find(&mysqlList11)
c.JSON(http.StatusOK, gin.H{"id desc": mysqlList11,
})

6、count统计总数 

mysqlList12 := []models.Mysqll{}
var count int64
models.DB.Find(&mysqlList12).Count(&count)
c.JSON(http.StatusOK, gin.H{"count": count,
})

6.1、Count判断id大于1的数据量

mysqlList13 := []models.Mysqll{}
var count1 int64
models.DB.Where("id > ?", 1).Find(&mysqlList13).Count(&count1)
c.JSON(http.StatusOK, gin.H{"id大于1": count1,
})

7、原生 sql进行操作

 SQL 构建器 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.icon-default.png?t=N7T8https://gorm.io/zh_CN/docs/sql_builder.html

7.1使用原生 sql 删除 user 表中的一条数据 

result := models.DB.Exec("delete from user where id = ?", 1)
fmt.Println(result.RowsAffected)

 7.2、使用原生 sql 修改 user 表中的一条数据

result2 := models.DB.Exec("update user set username = ? where id = ?", "卫宫切嗣", 2)
fmt.Println(result2.RowsAffected)

7.3、使用原生 sql查询 id=2 的数据 

mysqlList14 := []models.Mysqll{}
models.DB.Raw("select * from mysqll where id = ?", 2).Scan(&mysqlList14)
c.JSON(http.StatusOK, gin.H{"id=2": mysqlList14,
})

7.3、使用原生 查询 msyqll表中所有的数据

mysqlList15 := []models.Mysqll{}
models.DB.Raw("select * from mysqll").Scan(&mysqlList15)
c.JSON(http.StatusOK, gin.H{"mysqll": mysqlList15,
})

 

7.4.统计 mysqll 表的数量

var count3 int64
models.DB.Raw("select count(*) from mysqll").Scan(&count3)
c.JSON(http.StatusOK, gin.H{"count": count3,
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android--Jetpack--数据库Room详解二

本是青灯不归客&#xff0c;却因浊酒恋红尘 一&#xff0c;基本使用 关于Room数据库的基本使用&#xff0c;请参考文章Android--Jetpack--数据库Room详解一-CSDN博客 二&#xff0c;Room与ViewModle,LiveData的结合使用 LiveData与ViewModle的使用&#xff0c;请参考文章Andr…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》

这篇文章的标题表明研究的主题是在配电网发生灾害后&#xff0c;采用一种策略来实现多源协同孤岛运行&#xff0c;并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词&#xff1a; 考虑移动式储能调度&#xff1a; 文章关注的焦点之一是移动式储能系统的…

国标GB28181安防监控系统/磁盘阵列EasyCVR(V.3.4)新亮点:免保活功能

TSINGSEE青犀近日发布了EasyCVR安防管理平台的V.3.4版本&#xff0c;其中一大亮点就是很多朋友都在咨询的“免保活”功能&#xff0c;那么&#xff0c;什么是“免保活”功能&#xff1f;又该如何配置呢&#xff1f; 在EasyCVR平台有个【按需直播】按钮&#xff0c;顾名思义&…

ARM流水灯

.text .global _start _start: LED1 1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) STR R1,[R0] 2.设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BIC R1,R1,#(0x3<&…

Linux | 多线程

前言 本文主要介绍多线程基础知识&#xff0c;以及使用多线程技术进行并发编程&#xff1b;最后会介绍生产者消费者模型&#xff1b; 一、线程基本认识 1、什么是线程 如果你是科班出生&#xff0c;你肯定听过线程相关概念&#xff1b;但是你可能没有真正搞懂什么是线程&#…

练基础忆基础打好基础:68个 Python 内置函数搞搞清楚

内置函数就是Python给你提供的, 拿来直接用的函数&#xff0c;比如print&#xff0c;input等。 截止到python版本3.6.2 &#xff0c;一共提供了68个内置函数&#xff0c;具体如下&#x1f447; abs() dict() help() min() setattr() all() …

集群监控Zabbix和Prometheus

文章目录 一、Zabbix入门概述1、Zabbix概述2、Zabbix 基础架构3、Zabbix部署3.1 前提环境准备3.2 安装Zabbix3.3 配置Zabbix3.4 启动停止Zabbix 二、Zabbix的使用与集成1、Zabbix常用术语2、Zabbix实战2.1 创建Host2.2 创建监控项&#xff08;Items&#xff09;2.3 创建触发器&…

以太网协议与DNS

以太网协议 以太网协议DNS 以太网协议 以太网用于在计算机和其他网络设备之间传输数据,以太网既包含了数据链路层的内容,也包含了物理层的内容. 以太网数据报: 其中目的IP和源IP不是网络层的目的IP和源IP,而是mac地址.网络层的主要负责是整体的转发过程,数据链路层负责的是局…

Data Mining数据挖掘—2. Classification分类

3. Classification Given a collection of records (training set) – each record contains a set of attributes – one of the attributes is the class (label) that should be predicted Find a model for class attribute as a function of the values of other attribu…

Vue3中使用tinymce, tinymce上传图片,tinymce使用emoji表情

1.效果图 2. 安装 npm i tinymce npm i tinymce/tinymce-vue在node_modules文件夹中找到tinymce下的skins复制到项目public文件夹中子组件 <template><editor v-model"myValue" :init"init" :disabled"disabled" :id"tinymceId&…

小型洗衣机哪个牌子质量好?五款高性价比内衣洗衣机推荐

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…

浅谈 USB Bulk 深入浅出 (3) - USB Bulk 装置传输的注意事项

来源&#xff1a;大大通 作者&#xff1a;冷氣團 1 USB Bulk 是什么 USB 是即插即用使用差动信号的装置界面&#xff0c;是以 端点 ( Endpoint )&#xff0c;做为传输装置的输出入端&#xff0c;透过不同的端点 ( Endpoint ) 和模式&#xff0c;来进行与装置的沟通&#xff…

antv - G6 绘制1:N N:1 跨节点的graph

文章目录 hover时候&#xff0c;当前节点高亮&#xff0c;且直接相连的线和节点也高亮展示&#xff08;展示直接关系&#xff09;节点的label超过10个字的时候&#xff0c;文本溢出&#xff0c;且hover有tooltip&#xff1b;小于10个字&#xff0c;没有tooltiptootip使用插件mo…

getchar的功能和用法

getchar()是C语言中的一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取一个字符&#xff0c;并将其作为int类型返回。它通常用于从键盘获取用户输入。 getchar()函数在程序中等待用户输入&#xff0c;当用户输入一个字符并按下回车键后&#…

vue3+ts+vite+element plus 实现table勾选、点击单行都能实现多选

需求&#xff1a;table的多选栏太小&#xff0c;点击的时候要瞄着点&#xff0c;不然选不上&#xff0c;要求实现点击单行实现勾选 <ElTableborder:data"tableDataD"style"width: 100%"max-height"500"ref"multipleTableRef"selec…

RMAN执行crosscheck archivelog出现ORA-19633错误

1.错误现象 RMAN> crosscheck archivelog all;RMAN-03009: failure of crosscheck command on ORA DISK 1 channel at 12/13 ORA-19633: control file record 222572 is out ofsync with recovery catalog此问题一般是由于数据库从Windows迁移到linux&#xff0c;导致的归档…

Vue路由跳转重定向动态路由VueCli

Vue路由跳转&重定向&动态路由&VueCli 一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要给当前跳转的导航加样式&#xff0c;同时要移除上一个a标签的样式&#xff0c;太麻烦&#xff01;&#xff01;&#xff01; …

做题总结 160.链表相交

160.链表相交 我的思路代码改进 LeetCode&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 我的思路 计算链表A、B的长度count1、count2。临时指针curA、curB要同时指向…

算法笔记—二分搜索

二分搜索 1. 有序数组中确定 num 存在还是不存在2. 有序数组找大于等于 num 的最左位置3. 有序数组找小于等于 num 的最右位置4. 二分搜索不一定发生在有序数组上 如果数组长度为n&#xff0c;二分搜索搜索次数是log2n次&#xff0c;时间复杂度O(log n) 1. 有序数组中确定 num …

Mybatis plus 大数据量查询慢问题

大数据量操作一般用在数据迁移&#xff0c;数据导出&#xff0c;批量处理数据   在实际工作中当中&#xff0c;查询数据过大&#xff0c;我们使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或者分很大一页查询数据时&#xff0c;如果一…