GoLang连接mysql数据库
跟着文档走
GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
1.使用命令拉取
go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite |
2.开始使用
package mainimport ("fmt""github.com/gin-gonic/gin""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/schema""net/http""strconv""time"
)func main() {// 创建服务ginServer := gin.Default()// 连接mysql// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情dsn := "root:zsp123456@tcp(127.0.0.1:3306)/zsp?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{// 表明复数问题NamingStrategy: schema.NamingStrategy{SingularTable: true},})// 设置sql的一些属性sqlDB, err := db.DB()sqlDB.SetMaxIdleConns(10)sqlDB.SetMaxOpenConns(100)sqlDB.SetConnMaxLifetime(10 * time.Second) // 10s//结构体,就是创建表用的,包含了name,state,phonetype List struct {// 主键id等信息gorm.ModelName string `gorm:"type:varchar(20);not null" json:"name" binding:"required"`State int `gorm:"type:int(10);not null" json:"state" binding:"required"`Phone string `gorm:"type:varchar(50);not null" json:"phone" binding:"required"`}// 数据库迁移db.AutoMigrate(&List{})// 以上就是准备工作,下面开始crud// CRUD// 增加ginServer.POST("/add", func(context *gin.Context) {var data Listerr := context.ShouldBindJSON(&data)// 判断绑定是否有错误if err != nil {context.JSON(http.StatusBadRequest, gin.H{"msg": "数据有误"})} else {// 数据库操作 增加一条数据db.Create(&data) // 创建一条数据context.JSON(http.StatusOK, gin.H{"msg": "添加成功","data": data,"code": http.StatusOK,})}})// 删除ginServer.DELETE("/delete/:id", func(context *gin.Context) {var data []List// 接收idid := context.Param("id")// 判断id是否存在db.Where("id = ?", id).Find(&data)// id存在则删除,不存在报错if len(data) == 0 {context.JSON(http.StatusOK, gin.H{"msg": "删除失败","code": http.StatusBadRequest,})} else {// 操作数据库删除db.Where("id = ?", id).Delete(&data)context.JSON(http.StatusOK, gin.H{"msg": "删除成功","code": http.StatusOK,})}})//修改ginServer.PUT("/edit/:id", func(context *gin.Context) {var data List// 接收idid := context.Param("id")// 判断id是否存在db.Select("id").Where("id = ?", id).Find(&data)// 判断id是否存在if data.ID == 0 {context.JSON(http.StatusBadRequest, gin.H{"msg": "用户id没有找到",})} else {err := context.ShouldBindJSON(&data)if err != nil {context.JSON(http.StatusBadRequest, gin.H{"msg": "修改失败",})} else {//db修改数据库db.Where("id = ?", id).Updates(&data)context.JSON(http.StatusOK, gin.H{"msg": "修改成功",})}}})// 查询(条件查询,全部查询/分页查询)//条件查询ginServer.GET("/list/:name", func(context *gin.Context) {//获取路径参数name := context.Param("name")var data []List// 查询数据库是否存在db.Where("name = ?", name).Find(&data)// 判断是否查询到数据if len(data) == 0 {context.JSON(http.StatusBadRequest, gin.H{"msg": "没有查询到数据",})} else {context.JSON(http.StatusOK, gin.H{"msg": "查询成功","data": data,})}})// 分页查询ginServer.GET("/list", func(context *gin.Context) {var pageList []List// 1.查询全部数据、查询分页数据pageSize, _ := strconv.Atoi(context.Query("pageSize"))pageNum, _ := strconv.Atoi(context.Query("pageNum"))// 判断是否需要分页if pageSize == 0 {pageSize = -1}if pageNum == 0 {pageNum = -1}offsetVal := (pageNum - 1) * pageSizeif pageNum == -1 && pageSize == -1 {offsetVal = -1}// 返回一个总数var total int64// 查询数据库// limit 分页 -1:查询全部数据db.Model(pageList).Count(&total).Limit(pageSize).Offset(offsetVal).Find(&pageList)if len(pageList) == 0 {context.JSON(http.StatusBadRequest, gin.H{"msg": "暂无数据",})} else {context.JSON(http.StatusOK, gin.H{"msg": "查询成功","data": gin.H{"list": pageList,"total": total,"pageNum": pageNum,"pageSize": pageSize,},"code": http.StatusOK,})}})//启动服务err = ginServer.Run(":8082")if err != nil {return}
}
构造体创建出来的表

相关文章:
GoLang连接mysql数据库
跟着文档走GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 1.使用命令拉取 go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite2.开始使用 package mainimport ("fmt""github.com/gin-gonic/gin"&…...
软件工程与计算总结(八)软件设计基础
一.设计思想的发展 1958:软件这个名词第一次在公开刊物上使用~60年代中后期and70年代前中期:结构化编程、逐步求精、自顶向下理念是程序设计主要方法70年代中后期and90年代:结构化设计方法、抽象数据类型、信息隐藏、封装、继承、多态等思想…...
someip 入门
什么是someip? SomeIP(Scalable Service-Oriented MiddlewarE over IP)是一种基于以太网的通信协议,用于汽车领域的通信。它允许不同的汽车电子控制单元(ECUs)之间通过网络进行通信,以便在车辆内…...
C# 使用Parallel去执行并行下载
直接上代码: //最大线程下载数量ParallelOptions options new ParallelOptions{MaxDegreeOfParallelism 5};public async Task DownloadMusicUrl(List<MusicTags> musicTags){DateTime currentTime DateTime.Now;DateTime startTime new DateTime(1970, 1…...
@Component 和 @Bean的区别
Component 和 Bean 是Spring框架中用于管理和配置依赖注入的关键注解,用于定义和管理Spring应用程序中的组件。 Component: Component 是一种泛用型的Spring注解,用于标识一个类为Spring组件。Spring会自动扫描所有带有Component 注解的类,并…...
百度测试开发工程师面试心得
百度测试开发实习生面试心得: 电话面试: 面试官:首先做一下自我介绍吧 我:我是***,来自什么大学,现在大三,在学校期间担任过部长,副主席等职务, 组织举办了很多比赛&…...
发现更多美景!XnViewMP for Mac/Windows 图片浏览软件
想要轻松快捷地浏览、管理和编辑您的照片吗?XnViewMP for Mac 是您的最佳选择!这款强大而多功能的图片浏览软件将给您带来全新的视觉体验。 借助 XnViewMP,您可以方便地浏览各种图片格式,包括JPEG、PNG、GIF等,并支持…...
城市广告牌安全传感器特点有哪些?
城市广告牌安全传感器特点有哪些? 在现代快节奏的都市生活中,城市的广告牌成为不可或缺的一部分,以各种形式和大小存在于城市的街头巷尾,商业中心和交通要道。广告牌是城市生命线组成的一部分。但是由于天气因素、材料老化、不当维…...
源码部署lamt架构
源码部署lamt架构 lamt由apache,mysql,tomcat三者组成 文章目录 源码部署lamt架构1.准备工作1.1.配置yum源,关闭防火墙和selinux1.2.拉取相应源码包 2.安装apache3.安装mariadb4.安装tomcat 1.准备工作 1.1.配置yum源,关闭防火墙…...
【Java 进阶篇】JavaScript Math对象详解
在JavaScript编程中,Math对象是一个非常有用的工具,用于执行各种数学运算。它提供了许多数学函数和常数,可以用于处理数字、执行几何运算、生成随机数等。在本篇博客中,我们将深入探讨JavaScript中Math对象的各种功能和用法。 什…...
geecg-uniapp 路由修改 页面创建 (2)
一,增加页面 添加路由 (1)我们以home的常用服务 当作示例 我们修改 usList 数据 (2)查找对应路径 work.js 目前荒石对应的路径跳转 helloword 我们修改成 huang (3)修改跳转路径 修…...
微信开发者工具下载
一、微信开发者工具下载官网 微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com) 二、微信开发者工具界面 下载安装好后,软件图标如下图所示。 运行软件如下图所示,这时候就需要使用你的管理员账号扫码登录。 登陆后的界面,如下图…...
ctfshow萌新计划web9-14(正则匹配绕过)
目录 web9 web10 web11 web12 web13 web14 web9 审一下代码,需要匹配到system|exec|highlight才会执行eval函数 先看一下当前目录下有什么 payload:?csystem(ls); index.php是首页,我们看看config.php payload:?csystem…...
【数据结构】单链表按位序插入元素e【前插】(带头结点的和不带头结点的)这篇很重要,文字说明比起其他篇是正确的
声明单链表的结构体成员 struct LNode {int data;struct LNode *next; };typedef struct LNode LNode;// 或者: 两者是等价的 typedef struct LNode {int data;struct LNode *next; }LNode;按位序插入元素e:就是在第i个位置插入新结点,数据域为e 以下带…...
Maven Surefire Exclude 无效问题排查日志
昨天有个需求,要在单元测试的时候单线程执行,并且只执行单元测试类特殊结尾的,那么根据以往经验,直接在maven里面配置exclude并且指定include即可。如下尝试 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin&…...
ArcGIS笔记4_水动力模型验证不理想时如何修改局部水深地形
本文目录 前言Step 1 模型验证不理想的情况Step 2 修改确值点并重新插值 前言 本章主要服务于MIKE水动力模型的调整修改工作。水动力模型跑完之后,常常会出现验证结果不理想的情况,比如潮位验证中,实测站点数据与模拟数据相差很大࿰…...
介绍一下mysql有哪些索引类型
以下是MySQL的8种不同索引类型的比较,以帮助你了解它们的特点和适用场景: 索引类型用途和特点适用场景B-Tree 索引用于范围查询、等值查找和排序操作大多数查询 ,不适合全文搜索和空间数据。唯一索引保证索引列的值唯一,不允许重…...
#力扣:125. 验证回文串@FDDLC
125. 验证回文串 一、Java class Solution {public boolean isPalindrome(String s) {for (int l 0, r s.length() - 1; l < r; l, r--) {while (l < r && !Character.isLetterOrDigit(s.charAt(l))) l;while (l < r && !Character.isLetterOrDig…...
分享一下便利店怎么做微信小程序
便利店微信小程序开发,让生意更便捷! 在这个数字化时代,微信小程序已经成为一种新的生活方式。它不仅改变了人们的消费习惯,还为各行各业提供了无限商机。对于便利店来说,微信小程序是一个绝佳的营销工具,…...
Gitlab CI/CD 入门教程
前言 开发人员常常提到的 CI/CD 是什么? 是用于集成测试的工具,每次提交代码后自动检测、构建和进行单元测试的过程。这一整条流水线式的测试流程我们称之为 pipeline。 入门教程 如何使用 CI/CD? 首先需要确保有可用的 runner(如何确保…...
Linux核心转储文件生成与调试全指南
1. Linux核心转储文件调试方法详解1.1 核心转储文件概述在Linux系统下,当程序发生崩溃时,系统会生成一个包含程序崩溃时内存映像的文件,称为core文件。这个文件记录了程序崩溃时的内存状态和调试信息,是定位程序崩溃原因的重要工具…...
PhysX帧分配器:一帧一擦的高效艺术
写满就擦,擦完再写,永不停歇引子:数学老师的白板 还记得高中数学课吗? 老师走进教室,面前是一块干干净净的白板。他开始讲解——写公式、画图形、列步骤,白板渐渐被填满。下课铃响,老师拿起板擦…...
嵌入式串口协议中间件:轻量级SerHelp库设计与应用
1. 项目概述nahs-Bricks-Lib-SerHelp是 NAHS(North American Home System)生态中面向嵌入式砖块化(Brick-based)硬件平台的一套轻量级串行通信辅助库。该库不提供底层驱动实现,而是聚焦于串口协议层的工程化封装与通用…...
超越单一工具:在快马平台探索多模型ai辅助开发的全新工作流
在开发过程中,AI辅助工具已经逐渐成为提升效率的利器。最近我在尝试使用InsCode(快马)平台时,发现它提供的多模型AI辅助开发能力,远比单一工具更加强大和灵活。下面分享一个我实践的综合示例项目,展示如何利用平台的多模型能力优化…...
避坑指南:Pyannote3.1+Whisper本地部署的5个常见报错解决方案
避坑指南:Pyannote3.1Whisper本地部署的5个常见报错解决方案 语音处理技术正在重塑教育、会议记录和客服质检等场景的交互方式。当开发者尝试将Whisper的精准语音识别与Pyannote的说话人分离能力结合时,常会在环境配置环节遭遇"拦路虎"。本文…...
告别调参玄学:手把手教你用‘黎卡提方程’为自动驾驶LQR控制器选择Q和R矩阵
自动驾驶轨迹跟踪实战:从黎卡提方程到LQR调参的工程化思考 当你在仿真环境中第一次看到自己设计的LQR控制器让车辆完美跟踪参考轨迹时,那种成就感难以言喻。但更多时候,我们面对的是震荡的超调曲线、缓慢的收敛速度,以及令人抓狂的…...
3分钟搞定Mac外接显示器控制:MonitorControl完全指南
3分钟搞定Mac外接显示器控制:MonitorControl完全指南 【免费下载链接】MonitorControl MonitorControl/MonitorControl: MonitorControl 是一款开源的Mac应用程序,允许用户直接控制外部显示器的亮度、对比度和其他设置,而无需依赖原厂提供的软…...
LxgwWenkaiGB:合规开源字体的专业应用指南
LxgwWenkaiGB:合规开源字体的专业应用指南 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB LxgwWenkaiGB(霞鹜文楷 GB)作为…...
硬核盘点|2026年好用AI论文写作工具榜单,毕业论文免费写还合规
2026 年实测 10 款主流 AI 论文工具,千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜;ThouPen 稳坐留学生毕业全流程工具头把交椅;免费工具中DeepSeek Scholar、豆包学术版表现亮眼,30 分钟即可生成万字高质量初稿࿰…...
STM32CubeMX+Keil MDK联合开发:手把手教你配置蓝桥杯G431工程模板
STM32CubeMXKeil MDK联合开发:手把手教你配置蓝桥杯G431工程模板 对于参加蓝桥杯嵌入式赛道的选手来说,掌握STM32G431RBT6开发板的快速工程搭建是必备技能。本文将带你从零开始,通过STM32CubeMX和Keil MDK的协同工作,完成一个标准…...
