GORM学习笔记

GORM学习笔记

官方文档:https://gorm.io/zh_CN/docs/

1、数据准备

create table student
(id         int auto_incrementprimary key,sn         varchar(20) null,name       varchar(20) null,email      varchar(20) null,class_id   int         null,monitor_id int         null
);

2、快速开始

2.1、安装依赖

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

2.2、db

package modelimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)var DB *gorm.DB
var err error// Student 属性需大写
type Student struct {Id        intSn        stringName      stringEmail     stringClassId   intMonitorId int
}func (s Student) TableName() string {return "student"
}func init() {dsn := "root:Chace2233.@tcp(127.0.0.1:3306)/study?charset=utf8&parseTime=True&loc=Local"DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println(err)}fmt.Println(DB)
}

2.3、controller

package controllerimport ("fmt""ginstudy/model""github.com/gin-gonic/gin""net/http""strconv"
)type StudentController struct {}func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询//model.DB.Find(&users)// 条件查询model.DB.Where("id<6").Find(&users)c.JSON(http.StatusOK, users)
}func (student StudentController) Insert(c *gin.Context) {var user = model.Student{Sn: "10019", Name: "aaa", Email: "aaa@aynu.com", ClassId: 1, MonitorId: 1}tx := model.DB.Create(&user)fmt.Println(tx.Error)if tx.Error != nil {c.JSON(http.StatusOK, gin.H{"insert":  "error","message": tx.Error,})} else {c.JSON(http.StatusOK, gin.H{"insert": "success",})}
}func (student StudentController) Update(c *gin.Context) {id, _ := strconv.Atoi(c.Param("id"))// 修改方式1//var user = model.Student{Id: id}//model.DB.Find(&user)//user.Name = "5A+"//tx := model.DB.Save(&user)//if tx.Error != nil {//	c.JSON(http.StatusOK, gin.H{//		"update":  "error",//		"message": tx.Error,//	})//} else {//	c.JSON(http.StatusOK, gin.H{//		"update": "success",//	})//}// 修改方式2tx := model.DB.Model(&model.Student{}).Where("id=?", id).Update("name", "gorm")if tx.Error != nil {c.JSON(http.StatusOK, gin.H{"update":  "error","message": tx.Error,})} else {c.JSON(http.StatusOK, gin.H{"update": "success",})}
}func (student StudentController) Delete(c *gin.Context) {id, _ := strconv.Atoi(c.Param("id"))var user = model.Student{Id: id}tx := model.DB.Delete(&user)if tx.Error != nil {c.JSON(http.StatusOK, gin.H{"delete":  "error","message": tx.Error,})} else {c.JSON(http.StatusOK, gin.H{"delete": "success",})}
}

2.4、router

package routerimport ("ginstudy/controller""github.com/gin-gonic/gin"
)func StudentRouter(r *gin.Engine) {group := r.Group("/student")studentController := controller.StudentController{}{group.GET("/", studentController.Select)group.POST("/insert", studentController.Insert)group.PUT("/update/:id", studentController.Update)group.DELETE("/delete/:id", studentController.Delete)}
}

3、查询

3.1、字段别名

type Student struct {Id        int    `json:"id"`Sn        string `json:"sn"`Name      string `json:"name"`Email     string `json:"email"`ClassId   int    `json:"class-id"`MonitorId int    `json:"monitor-id"`
}

3.2、条件查询

func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询//model.DB.Find(&users)// 条件查询1//model.DB.Where("id<6").Find(&users)//model.DB.Where("id<?", 6).Find(&users)// 条件查询2//model.DB.Where("id>1 and id<5").Find(&users)//model.DB.Where("id>? and id<=?", 1, 5).Find(&users)// 条件查询3//model.DB.Where("id in (?)", []int{1, 5}).Find(&users)// 条件查询4//model.DB.Where("name like ?", "%zhou%").Find(&users)// 条件查询5//model.DB.Where("id between ? and ?", 1, 3).Find(&users)// 条件查询6//model.DB.Where("id = ? or id = ?", 1, 3).Find(&users)model.DB.Where("id = ? or id = ?", 1, 3).Or("id = ?", 5).Find(&users)c.JSON(http.StatusOK, users)
}

3.3、指定字段

其他字段置空,可自定义结构体(注意指定表名)

func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询model.DB.Select("id,name").Find(&users)c.JSON(http.StatusOK, users)
}

3.4、排序

func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询model.DB.Order("id desc").Find(&users)c.JSON(http.StatusOK, users)
}

3.5、分页查询

func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询model.DB.Order("id desc").Offset(3).Limit(2).Find(&users)c.JSON(http.StatusOK, users)
}

3.6、计数

func (student StudentController) Select(c *gin.Context) {var users []model.Student// 全量查询var count int64model.DB.Find(&users).Count(&count)fmt.Println(count)c.JSON(http.StatusOK, users)
}

4、原生SQL

4.1、原生插入

func (student StudentController) Exec(c *gin.Context) {model.DB.Exec("INSERT INTO student (sn, name, email, class_id, monitor_id) VALUES ('10020', 'ceshi', 'ceshi@qq.com', 1, 2)")c.JSON(http.StatusOK, gin.H{"status": "success",})
}

4.2、原生修改

func (student StudentController) Exec(c *gin.Context) {model.DB.Exec("update student set name=?  where sn=?", "gorm", 10019)c.JSON(http.StatusOK, gin.H{"status": "success",})
}

4.3、原生删除

func (student StudentController) Exec(c *gin.Context) {model.DB.Exec("delete from student where sn=?", 10019)c.JSON(http.StatusOK, gin.H{"status": "success",})
}

4.3、原生查询

func (student StudentController) Exec(c *gin.Context) {var users []model.Studentmodel.DB.Raw("select * from student").Scan(&users)c.JSON(http.StatusOK, gin.H{"status": "success","data":   users,})
}

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

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

相关文章

【第2章 Node.js基础】2.5 Node.js 的定时器

定时器timers 模块对外暴露一个全局的API用于调度在某个时段调用的函数因为定时器函数是全局变量&#xff0c;所以不需要加载timers 模块来使用它。Node.s 的定时器函敬实现了与 Web 浏览器提供的定时器 API 类似的 AP&#xff0c;但是它们使用了不同的内部实现机制&#xff0c…

腾讯云4核8G和2核4G服务器五年优惠价格表

腾讯云百科整理五年云服务器优惠活动 txybk.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;睿频3…

The 8th China Open Source Conference Successfully Concludes

由开源社主办的第八届中国开源年会&#xff08;COSCon23&#xff09;于 2023年10月29日在成都圆满收官。本次大会&#xff0c;为期两天&#xff0c;线下参会报名逾千人次&#xff0c;在线直播观看人数总计 168610 人&#xff0c;直播观看次数达 248725 次&#xff0c;官网累计浏…

LeetCode【238】除自身意外的数组的乘积

题目&#xff1a; 思路&#xff1a; https://zhuanlan.zhihu.com/p/109306706?utm_id0 代码&#xff1a; int n nums.length;int[] l new int[nums.length];int[] r new int[nums.length];l[0] 1;r[n-1] 1;for (int i1;i<nums.length;i) {l[i] l[i-1] * nums[i-1]…

使用字典树实现一个可以自动补全的输入框

说在前面 平时我们在终端输入命令的时候是不是都可以通过tab键来进行快速补全&#xff1f;那么有没有想过怎么去实现这个自动补全的功能呢&#xff1f;今天让我们一起来使用字典树实现一个可以自动补全的输入框。 效果展示 体验地址 http://jyeontu.xyz/jvuewheel/#/JAutoComp…

【C++】替代--whole-archive的一种方式

上篇文章《C自动注册的工厂与--whole-archive》提到了--whole-archive选项在自动工厂示例的必要&#xff0c;“貌似也没其他方法了”。 这篇文章介绍另一种可以替代的方式&#xff0c;并分析其优缺点&#xff0c;采用的代码示例同上篇文章。文章最后附代码。 方法介绍 ld链接器…

Python+Qt多点最短路径(最优路径)算法实现

程序示例精选 PythonQt多点最短路径(最优路径)算法实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQt多点最短路径(最优路径)算法实现》编写代码&#xff0c;代码整洁&#xff0…

Qt执行带参sql

//准备执行的sql语句&#xff0c;此为带参的sql语句query.prepare("update employee set Name:Name, Gender:Gender,Height:Height,"" Birthday:Birthday, Mobile:Mobile, Province:Province,"" City:City, Department:Department, Education:Educati…

Android 透明度设置

目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注&#xff1a;00是完全透明&#xff0c;FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」&#xff0c;这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…

MR混合现实情景实训教学系统模拟历史情景

二、应用场景 1. 古代战争场景&#xff1a;通过MR混合现实情景实训教学系统&#xff0c;学生可以亲身体验古代战争的场景&#xff0c;如战场布置、战术运用等。这不仅有助于学生更好地理解古代战争的特点&#xff0c;还能够培养他们的团队协作和战略思维能力。 2. 历史文化古…

SparkSQL数据的加载与保存

1 读取和保存文件 SparkSQL读取和保存的文件一般为三种&#xff0c;JSON文件、CSV文件和列式存储的文件&#xff0c;同时可以通过添加参数&#xff0c;来识别不同的存储和压缩格式。 1.1 CSV文件 1&#xff09;代码实现 package com.atguigu.sparksql; import com.atguigu.spar…

vscode+python开发之虚拟环境和解释器切换

需求情景&#xff1a; 现在我们要开发多个项目比如&#xff1a;项目A&#xff0c;项目B、项目C&#xff0c;他们每个项目需要依赖不同的库。每个项目依赖的解释器也不一样怎么办&#xff1f; 项目A&#xff1a;需要在python3.7环境运行 依赖aadd3.2库 项目B、需要在python3.11…

C/C++轻量级并发TCP服务器框架Zinx-框架开发001: 读取标准输入,回显到标准输出

文章目录 完整代码实现参考-非项目使用项目使用的代码 - 乱-但是思路与上面的相同创建Kernel类添加删除修改epoll&#xff0c;才能写run方法创建stdin_Channel类在Kernel类中实现run方法 完整代码实现参考-非项目使用 #include <errno.h> #include <signal.h> #in…

2024上海国际智能驾驶技术展览会(自动驾驶展)

2024上海国际智能驾驶技术展览会 2024 Shanghai International Autonomous driving Expo 时间&#xff1a;2024年3月26-28日 地点&#xff1a;上海跨国采购会展中心 随着科技的飞速发展&#xff0c;智能驾驶已经成为了汽车行业的重要趋势。在这个时代背景下&#xff0c;汽车不…

Ansys Lumerical | 用于增强现实系统的表面浮雕光栅

在本示例中&#xff0c;我们使用 RCWA 求解器设计了一个斜面浮雕光栅 (SRG)&#xff0c;它将用于将光线耦合到单色增强现实 (AR) 系统的波导中。光栅的几何形状经过优化&#xff0c;可将正常入射光导入-1 光栅阶次。 然后我们将光栅特性导出为 Lumerical Sub-Wavelength Model …

数字媒体技术基础之:常见图片文件格式

在数字图像处理和图形设计领域&#xff0c;了解不同的图片文件格式及其特点是至关重要的。每种格式都有其独特的用途和优势。以下介绍一些最常见的图片文件格式。 JPEG Joint Photographic Experts Group 扩展名&#xff1a;.jpg 或 .jpeg 特点&#xff1a; 1、有损压缩&#x…

【Proteus仿真】【51单片机】拔河游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、动态数码管模块等。 主要功能&#xff1a; 系统运行后&#xff0c;指示灯处于中间位置&#xff0c;数码管显示得分0&#xff0c;当按下…

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机&#xff1a;Realme Q 笔记本电脑&#xff1a;HP https://item.jd.com/100012583174.html 惠普&#xff08;HP&#xff09;战66 三代AMD版 14英寸轻薄笔记本电脑&#xff08;锐龙7nm 六核…

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果…