gorm:新增数据、封装DB初步、结合Gin实现查询API

Gin和Gorm常见面试题及解答_gorm面试题 视频、图片、音频,这三种既可以实现在浏览器端直接播放(预览),也可以改为直接下载。Gin中的中间件实际上还是一个Gin中的 gin.HandlerFunc。可以使用Gin路由的中间件功能,把要记录的接口封装到一个接口组中,然后注册中间件【方法】来处理。Gin里,因为一个请求过来后,是可以再开一个协程来处理请求的,这个需要在Gin里才能启用协程。路由组中间件:路由组中间件仅对该路由组下面的路由起作用。全局中间件:全局中间件设置之后对全局的路由都起作用。单个路由中间件:单个路由中间件仅对一个路由起作用。 阅读详情

新增数据

	db, _ := gorm.Open("mysql", "root:root@/test?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()
	// 打开日志日志,查看执行的sql
	db.LogMode(true)

	// 新增数据
	news := model.NewsModel{Title:"新闻标题4",Content:"新闻内容4"}
	affectedRow := db.Table("news").Create(&news).RowsAffected

	fmt.Println("受影响函数:",affectedRow)	//打印:受影响函数: 1
	// 新增数据的ID
	fmt.Println(news.Id)	//打印:4

往news表插入一条。

在gin框架中实现简单的api查询

package dao

import (
	"github.com/gin-gonic/gin"
	"github.com/jinzhu/gorm"
	"live.go.com/model"
)

//获取新闻详细
func GetNewsDetail(ctx *gin.Context) {
	db, _ := gorm.Open("mysql", "root:root@/test?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()
	// 打开日志日志,查看执行的sql
	db.LogMode(true)

	// 获取路由参数
	newsId := ctx.Param("news_id")
	// 开始查询数据
	news := model.NewsModel{}
	db.Table("news").Find(&news, newsId)

	// 返回json
	ctx.JSON(200, news)
}

路由如何调用?

package main

import (
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"live.go.com/dao"
)

func main() {
	// 默认路由对象
	router := gin.Default()

	// 新闻路由分组
	newsRouter := router.Group("/news")
	{
		// 获取某条新闻
		newsRouter.GET("/:news_id",dao.GetNewsDetail)
	}

	// 默认启动的是8080端口
	router.Run()
}

在这里插入图片描述

封装 db初步

新建db/MyDB.go

package db

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"log"
)

var DBHelper *gorm.DB
var err error

//初始化函数,引入包会自动执行
func init() {
	// 连接数据库
	DBHelper, err = gorm.Open("mysql", "root:root@/test?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		log.Fatal(err)
	}
	// 开启log日志
	DBHelper.LogMode(true)
}

然后dao层的GetNewsDetail()方法就可以使用我们封装的db

func GetNewsDetail(ctx *gin.Context) {
	// 获取路由参数
	newsId := ctx.Param("news_id")
	// 开始查询数据
	news := model.NewsModel{}
	db.DBHelper.Table("news").Find(&news, newsId)
	// 返回json
	ctx.JSON(200, news)

	//db.DBHelper.Close()	//思考:这里
}
【Go语言实战】(3) Gin + Gorm 简单备忘录 | 含接口文档 Go语言实战:TodoList 备忘录 阅读详情

相关推荐

Golang Web框架数据库集成:GORM实战教程

在Golang Web开发中,数据库集成是核心环节之一。GORM作为Go语言中最流行的ORM(对象关系映射)工具,提供了简洁强大的数据库操作接口,能够显著提升开发效率。本文旨在通过系统化的实战教程,帮助开发者掌握GORM的核心功能、最佳实践及企业级应用场景,覆盖从基础配置到高级优化的完整流程。背景知识:介绍ORM概念、GORM特性及核心术语核心原理:解析GORM架构、连接池机制及对象关系映射逻辑基础操作:通过代码示例演示数据库连接、模型定义、CRUD操作高级特性。

AI Agent Harness Engineering 1105

gorm封装并测试,连接数据库、迁移创建表、调用模型方法等

gorm 封装

胡一可 995

Go-easy-gin一套基于Gin框架的MVC脚手架

封装了 Gin Web 服务配置、数据库/连接池配置、视图配置,方便快速构建 Go Web 工程。自带一套用于体验及演示的 Restful Api 代码示例。

gin框架下Gorm查询技术全面讲解示例

Gorm查询全面技术讲解示例

PHP、go程序员实例学习记录 3338

gorm-generate:gorm模型存储库dao生成支架

gorm_generate Gorm模型自动生成支架 帮手: -config string Special config file, format: .yml -connection string DB connect dns -dao string The directory of dao generate. -model-directory string Generated model directory -model-file string Generate model file name -model-name string Generate model struct name -repo string

从末流211到东南软院:一个普通CS学生的保研逆袭全记录(含GPA、竞赛、面试避坑点)

本文详细记录了一位来自末流211院校的CS学生如何通过合理规划和持续努力,成功保研东南大学软件学院的完整历程。文章分享了GPA提升、竞赛策略、夏令营申请和预推免准备等关键环节的实战经验,特别强调了竞赛在弥补科研短板中的重要作用,为普通背景学生提供了可复制的保研逆袭方案。

weixin_33417488的博客 391

[封装]实战gorm

由于gorm不仅支持数据库读写操作,且以面向对象的编码方式实现数据库读写。本片文章从实际开发中所遇问题和新的需要,对gorm进行一次封装操作,以此来加快开发速度。 首先介绍代码架构: |----------------------- |- component |-- db.go |-- model.go |-- test.go |- include |-- container.go |-- db.go |- init |-- init.go |- model |-- bean |--- message

qq_36557960的博客 1792

逆向实战:Soul聊天协议加密与Frida绕过检测

本文详细解析了Soul聊天协议逆向分析的全过程,重点介绍了如何利用Frida绕过应用的反调试检测机制。通过静态分析定位关键SO库,并编写Frida脚本动态Hook线程创建函数,成功实现对抗。文章还进一步追踪了基于DES算法的加密流程,并探讨了协议数据结构的解析方法,为移动应用安全研究提供了实战参考。

2w3e4r5t6y的博客 1130

Go语言gin框架+gorm框架项目:使用jwt发放token,使用中间件实现用户认证以及以及封装http返回格式

Go语言gin框架项目:使用jwt发放token,使用中间件实现用户认证以及封装http返回

pyscl01的博客 3213

CP2102 USB 转 UART 模块 PCB 设计项目

不幸的是,我的笔记本电脑只有 USB 端口,所以我需要在 USB 端口和 UART 接口之间进行转换。PCB 布局将足够小,因此我们不一定需要高速布线 USB 线路,但我们将在此将其作为一个简单的示例来实现,以展示如何在这种类型的电路板上实现它。相反,我们只使用屏幕左侧的电路。在这里,我们利用对之间的间距和到 L1 上的铜灌注的距离将差分阻抗设置为目标值。初始布局分为两个部分:USB 连接器和 USB 线路的 TVS 二极管放置在电路板左侧,带有二极管 D4 和 D5 的引脚接头放置在电路板右侧。

jkh920184196的博客 2400

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

本文深入分析Windows系统下pip install SSLError与SSL模块缺失的根本原因,提供系统级修复方案。从Python安装包缺失SSL支持、OpenSSL库冲突到环境变量配置问题,详细讲解四大成因及对应的解决方案,包括重新安装Python、手动修复OpenSSL依赖等实用技巧,帮助开发者彻底解决HTTPS连接问题。

weixin_28595749的博客 459

Gorm泛型封装

gorme是一个对gorm进行泛型封装的orm工具,可以让代码变的更简单和优雅

weixin_37386174的博客 1565

PIPE Interface解析之PIPE SerDes/Original架构

PIPI Interface;SerDes架构;Original架构;PHY Tx结构;PHY Rx结构;

weixin_45176819的博客 2605

【Gin】Gin 使用 GORM 操作 MySQL 数据库

GORM 是Golang 的一个 orm 框架。ORM 就是通过实例对象的语法,完成关系数据库的操作的技术,是“对象-关系映射”(Object-Relational Mapping)的缩写。使用 orm 框架可以让我们更方便的操作数据库。

徒挽的博客 5268

【人脸识别】基于 Gabor+SVM和PCA+SVM实现人脸识别matlab源码含 GUI

1 简介 随着经济的快速发展,互联网的普及,信息安全逐渐被人们所重视。人脸识别技术作为保护信息安全的重要手段之一,也逐渐被研究学者所重视。人脸识别作为计算机视觉技术和生物特征识别技术的一个重要分支,模式识别与人工智能的一个重要领域,其主要任务是对静态图像或动态视频进行识别。如何快速的正确的对人脸进行识别是目前人脸识别课题的一个难题。人脸识别算法的选取直接关系到人脸识别的识别率。 本文首先介绍了国内外人脸识别的发展现状,并对人脸图像预处理方法进行了详细阐述。图像预处理的方法有很多,主要包括:灰度变换、图像锐

qq_59747472的博客 1135

C语言实现惯性导航初始对准全部核心代码

惯性导航初始对准包括间接粗对准和卡尔曼滤波精对准,其中。为基于卡尔曼滤波的精对准,其中。

十八与她的博客 2283

解锁GORM高级特性:gin-vue-admin数据库操作性能优化指南

在现代Web开发中,数据库操作的性能直接影响应用的响应速度和用户体验。gin-vue-admin作为一款基于Gin和Vue的全栈开发框架,集成了强大的ORM工具GORM,为开发者提供了便捷的数据库操作接口。本文将深入探讨如何利用GORM的高级特性优化gin-vue-admin项目的数据库性能,帮助开发者打造更高效、更稳定的应用系统。 ## 为什么GORM性能优化对gin-vue-admin至关重

gitblog_00144的博客 1115

【stm32+K210项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(完整工程资料源码)

本系统采用SG90舵机Maix Bit摄像头STM32C8T6主控板以及LX_TRIG_MP3_V6.0语音播报模块,构建了一套高效的智能垃圾分类系统,综合运用了图像识别、语音播报及精准控制技术。SG90舵机负责控制垃圾桶的开盖操作。该舵机通过接收PWM信号来实现转动,内部有一个基准电路产生周期为20ms的PWM信号,通过外部脉冲信号的控制(高电平时间在0.5ms至2.5ms之间),使得舵机的输出轴转动到指定位置。舵机内的位置反馈电位计。

嵌入式技术开发 5097

Gin(十一):集成 gorm

点击蓝色字关注我们!一个努力中的公众号长的好看的人都关注了随着项目的不断扩大,总有一天,项目中的表和表中的字段多的数不胜数,如果此时仍旧使用 SQL 语言来执行增删改查,...

代码猎奇站 1661

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

基于Gin和GORM的在线判题系统后端

我开发了一个基于Gin和GORM的在线判题系统后端,该系统主要有四个模块:公共模块:包括查看分类列表,查看问题列表等。用户模块:包括注册,登录,发送验证码,检测提交的代码。管理员模块:包括创建问题,修改问题,创建分类,修改分类等。安全模块:使用中间件验证用户或管理员身份。

技术卷的博客 1299

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Gin(十一):配合orm框架-gorm

随着项目的不断扩大,总有一天,项目中的表和表中的字段多的数不胜数,如果此时仍旧使用 SQL 语言来执行增删改查,务必会带来很多繁琐的事情,比如说我们要添加一个字段有十多个的结构体,要把结构体中的每个属性都要写一遍。极大的降低了开发速度,也会引入一些错误,所以我们要引入一些框架来对数据库进行管理,方便我们完成项目。这里我们介绍一下 gorm

代码猎奇站 3264

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Golang gin框架

gin框架学习一、Gin 介绍二、Gin 环境搭建三、golang 程序的热加载四、Gin 框架中的路由五、Gin HTML 模板渲染六、静态文件服务七、路由详解八、Gin 中自定义控制器九、Gin 中间件十、Gin 中自定义Model十一、Gin 文件上传十二、Gin 中的Cookie十三、Gin 中的Session十四、Gin 中使用GORM 操作mysql 数据库十五、原生 SQL 和 SQL 生成器十六、Gin 中使用GORM 实现表关联查询十七、 GORM 中使用事务十八、Gin 中使用go

book_longker的专栏 2万+

Go(一)Gin框架 和 GORM机制

Gin 负责处理程序的网络入口。在底层,Go 的 标准库已经自带了高效的协程调度和网络轮询(类似底层封装好的 epoll 模型),而 Gin 就是在这个基础上搭建的一层极其易用的脚手架。极速路由: Gin 底层使用了一棵基于基数树(Radix Tree)的路由引擎。它的路由匹配速度极快,内存占用极低,特别适合构建高并发的 RESTful API。数据绑定与校验 (类似 Pydantic): 当客户端发起 POST 请求时,Gin 可以直接将传递过来的 JSON 数据“反序列化”并绑定到 Go 的结构体(S

曾几何时的博客 406

Gin和Gorm常见面试题及解答

Gin和Gorm常见面试题及解答

Mr_XiMu的博客 2609

gin_gorm

restful风格:指的是网络应用中就是资源定位和资源操作风格,不是标准也不是协议form参数接收类型:form-data ,x-www-urlencoded,application/x-www-form-urlencoded请求方式对比:PUT 和 PATCHPUT:在服务器更新资源(客户端提供完整资源数据)PATCH:在服务器更新资源(客户端提供需要修改的资源数据)sqlx是Go语言中一个流行的数据库操作库,它构建在Go标准库之上,为数据库交互提供了更便捷、高效和功能丰富的方式。以下是对。

Wzx198012的博客 262
上一篇: gorm:结合Model进行数据映射
下一篇: gorm:数据库连接池
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值