当前位置: 首页 > news >正文

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去执行并行下载

直接上代码&#xff1a; //最大线程下载数量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框架中用于管理和配置依赖注入的关键注解&#xff0c;用于定义和管理Spring应用程序中的组件。 Component: Component 是一种泛用型的Spring注解&#xff0c;用于标识一个类为Spring组件。Spring会自动扫描所有带有Component 注解的类&#xff0c;并…...

百度测试开发工程师面试心得

百度测试开发实习生面试心得&#xff1a; 电话面试&#xff1a; 面试官&#xff1a;首先做一下自我介绍吧 我&#xff1a;我是***&#xff0c;来自什么大学&#xff0c;现在大三&#xff0c;在学校期间担任过部长&#xff0c;副主席等职务&#xff0c; 组织举办了很多比赛&…...

发现更多美景!XnViewMP for Mac/Windows 图片浏览软件

想要轻松快捷地浏览、管理和编辑您的照片吗&#xff1f;XnViewMP for Mac 是您的最佳选择&#xff01;这款强大而多功能的图片浏览软件将给您带来全新的视觉体验。 借助 XnViewMP&#xff0c;您可以方便地浏览各种图片格式&#xff0c;包括JPEG、PNG、GIF等&#xff0c;并支持…...

城市广告牌安全传感器特点有哪些?

城市广告牌安全传感器特点有哪些&#xff1f; 在现代快节奏的都市生活中&#xff0c;城市的广告牌成为不可或缺的一部分&#xff0c;以各种形式和大小存在于城市的街头巷尾&#xff0c;商业中心和交通要道。广告牌是城市生命线组成的一部分。但是由于天气因素、材料老化、不当维…...

源码部署lamt架构

源码部署lamt架构 lamt由apache&#xff0c;mysql&#xff0c;tomcat三者组成 文章目录 源码部署lamt架构1.准备工作1.1.配置yum源&#xff0c;关闭防火墙和selinux1.2.拉取相应源码包 2.安装apache3.安装mariadb4.安装tomcat 1.准备工作 1.1.配置yum源&#xff0c;关闭防火墙…...

【Java 进阶篇】JavaScript Math对象详解

在JavaScript编程中&#xff0c;Math对象是一个非常有用的工具&#xff0c;用于执行各种数学运算。它提供了许多数学函数和常数&#xff0c;可以用于处理数字、执行几何运算、生成随机数等。在本篇博客中&#xff0c;我们将深入探讨JavaScript中Math对象的各种功能和用法。 什…...

geecg-uniapp 路由修改 页面创建 (2)

一&#xff0c;增加页面 添加路由 &#xff08;1&#xff09;我们以home的常用服务 当作示例 我们修改 usList 数据 &#xff08;2&#xff09;查找对应路径 work.js 目前荒石对应的路径跳转 helloword 我们修改成 huang &#xff08;3&#xff09;修改跳转路径 修…...

微信开发者工具下载

一、微信开发者工具下载官网 微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com) 二、微信开发者工具界面 下载安装好后&#xff0c;软件图标如下图所示。 运行软件如下图所示&#xff0c;这时候就需要使用你的管理员账号扫码登录。 登陆后的界面&#xff0c;如下图…...

ctfshow萌新计划web9-14(正则匹配绕过)

目录 web9 web10 web11 web12 web13 web14 web9 审一下代码&#xff0c;需要匹配到system|exec|highlight才会执行eval函数 先看一下当前目录下有什么 payload&#xff1a;?csystem(ls); index.php是首页&#xff0c;我们看看config.php payload&#xff1a;?csystem…...

【数据结构】单链表按位序插入元素e【前插】(带头结点的和不带头结点的)这篇很重要,文字说明比起其他篇是正确的

声明单链表的结构体成员 struct LNode {int data;struct LNode *next; };typedef struct LNode LNode;// 或者: 两者是等价的 typedef struct LNode {int data;struct LNode *next; }LNode;按位序插入元素e&#xff1a;就是在第i个位置插入新结点&#xff0c;数据域为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水动力模型的调整修改工作。水动力模型跑完之后&#xff0c;常常会出现验证结果不理想的情况&#xff0c;比如潮位验证中&#xff0c;实测站点数据与模拟数据相差很大&#xff0…...

介绍一下mysql有哪些索引类型

以下是MySQL的8种不同索引类型的比较&#xff0c;以帮助你了解它们的特点和适用场景&#xff1a; 索引类型用途和特点适用场景B-Tree 索引用于范围查询、等值查找和排序操作大多数查询 &#xff0c;不适合全文搜索和空间数据。唯一索引保证索引列的值唯一&#xff0c;不允许重…...

#力扣: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…...

分享一下便利店怎么做微信小程序

便利店微信小程序开发&#xff0c;让生意更便捷&#xff01; 在这个数字化时代&#xff0c;微信小程序已经成为一种新的生活方式。它不仅改变了人们的消费习惯&#xff0c;还为各行各业提供了无限商机。对于便利店来说&#xff0c;微信小程序是一个绝佳的营销工具&#xff0c;…...

Gitlab CI/CD 入门教程

前言 开发人员常常提到的 CI/CD 是什么&#xff1f; 是用于集成测试的工具&#xff0c;每次提交代码后自动检测、构建和进行单元测试的过程。这一整条流水线式的测试流程我们称之为 pipeline。 入门教程 如何使用 CI/CD? 首先需要确保有可用的 runner&#xff08;如何确保…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...