go语言Gin框架的学习路线(七)

 GORM入门(基于七米老师)

目录

GORM入门

安装

连接数据库

连接MySQL

连接PostgreSQL

连接Sqlite3

连接SQL Server

我们搞一个连接MySQL的例子

创建数据库

GORM操作MySQL


GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方法来操作数据库,使得开发者可以用Go语言的代码来操作数据库,而不需要编写SQL语句。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、SQL Server等

以下是GORM的一些主要特性:

  1. 链式操作:GORM的链式操作使得代码更加简洁和易于阅读。
  2. 自动迁移:GORM可以自动检测模型的变化并更新数据库结构。
  3. 事务支持:GORM支持事务,确保数据的一致性。
  4. 关联模型:GORM支持多种关联关系,如一对一、一对多、多对多等。
  5. 预加载:GORM支持预加载关联数据,减少数据库查询次数。
  6. 条件查询:GORM提供了丰富的条件查询接口,方便进行复杂的数据查询。
  7. 钩子函数:GORM支持在数据的创建、更新、删除等操作前后执行自定义的代码。
  8. 插件系统:GORM有一套插件系统,可以扩展其功能。

使用GORM,你可以定义一个结构体来表示数据库中的一个表,然后通过这个结构体来操作数据库中的数据。

安装

go get -u github.com/jinzhu/gorm

连接数据库

按如下方式导入需要的数据库驱动即可

import _ "github.com/jinzhu/gorm/dialects/mysql"
import _ "github.com/jinzhu/gorm/dialects/postgres"
import _ "github.com/jinzhu/gorm/dialects/sqlite"
import _ "github.com/jinzhu/gorm/dialects/mssql"

在Go语言中,import语句用来导入包以便在代码中使用。在上述代码中import语句使用了下划线_作为别名,这是一种特殊的用法,表示导入包是为了执行包的初始化代码,而不是为了在当前文件中直接使用包中的导出符号(函数、类型、变量等)。使用这种方式导入方言包,通常是在应用程序的入口文件中进行,例如main.go或应用程序的配置文件中。这样做的好处是,即使你的应用程序只使用一种数据库,你也可以通过简单地导入相应的方言包来支持多种数据库,而不需要修改大量的代码。此外,这也有助于保持代码的组织性和可维护性

连接MySQL

import ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)func main() {db, err := gorm.Open("mysql", "user:password@(localhost)/dbname?charset=utf8mb4&parseTime=True&loc=Local")defer db.Close()
}

这段代码的主要目的是建立与MySQL数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。

连接PostgreSQL

import ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/postgres"
)func main() {db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")defer db.Close()
}

这段代码的主要目的是建立与PostgreSQL数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

连接Sqlite3

import ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/sqlite"
)func main() {db, err := gorm.Open("sqlite3", "/tmp/gorm.db")defer db.Close()
}

这段代码的主要目的是建立与SQLite数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

连接SQL Server

import ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mssql"
)func main() {db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")defer db.Close()
}

这段代码的主要目的是建立与Microsoft SQL Server数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

我们搞一个连接MySQL的例子

创建数据库

在使用GORM前手动创建数据库db1

CREATE DATABASE db1;
GORM操作MySQL
package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql" // 导入MySQL方言包,注册MySQL方言
)// UserInfo 定义用户信息的结构体
type UserInfo struct {ID     uint   // 用户IDName   string // 用户姓名Gender string // 用户性别Hobby  string // 用户爱好
}func main() {// 使用GORM打开与MySQL数据库的连接db, err := gorm.Open("mysql", "root:root1234@(127.0.0.1:13306)/db1?charset=utf8mb4&parseTime=True&loc=Local")// 检查连接是否有误,如果有误则打印错误并终止程序if err != nil {panic(err)}defer db.Close() // 确保在函数结束时关闭数据库连接// 使用AutoMigrate自动迁移UserInfo结构体到数据库,如果表不存在则创建db.AutoMigrate(&UserInfo{})// 创建两个用户信息实例u1 := UserInfo{1, "亨亨", "男", "打篮球"}u2 := UserInfo{2, "小欣", "女", "打羽毛球"}// 使用Create方法创建记录到数据库中db.Create(&u1)db.Create(&u2)// 查询操作:查询第一条记录var u = new(UserInfo)db.First(u)            // 查询结果赋值给变量ufmt.Printf("%#v\n", u) // 打印查询结果// 根据条件查询记录var uu UserInfodb.Find(&uu, "hobby=?", "打羽毛球") // 查询爱好为足球的用户信息fmt.Printf("%#v\n", uu)       // 打印查询结果// 更新操作:更新用户爱好为双色球db.Model(&u).Update("hobby", "双色球") // 通过Model指定更新对象,然后调用Update进行更新// 删除操作:删除指定的用户记录db.Delete(&u) // 通过Delete删除u指向的记录
}

这段代码是一个使用Go语言和GORM库来操作MySQL数据库的示例。下面是对代码的理解和简单记忆的方法:

  1. 包导入

    • 导入GORM库和MySQL方言包,使用下划线表示不直接使用包的内容,而是执行包的初始化代码。
  2. 定义结构体

    • UserInfo结构体代表数据库中的用户信息表,包含ID、姓名、性别和爱好四个字段。
  3. 主函数

    • main()是程序的入口点。
  4. 数据库连接

    • 使用gorm.Open函数连接到MySQL数据库,如果连接失败,使用panic终止程序。
  5. 自动迁移

    • AutoMigrate方法自动创建或修改数据库表以匹配UserInfo结构体。
  6. 创建记录

    • 创建两个UserInfo实例u1u2,然后使用Create方法将它们添加到数据库中。
  7. 查询记录

    • 使用First方法查询并打印数据库中的第一条记录。
    • 使用Find方法根据条件查询并打印特定记录(爱好为“打羽毛球”的用户)。
  8. 更新记录

    • 使用ModelUpdate方法更新指定记录的爱好字段为“双色球”。
  9. 删除记录

    • 使用Delete方法删除指定的记录。

简单记忆方法

  • 包导入:GORM和方言包。
  • 结构体:定义了数据库表的结构。
  • 连接gorm.Open连接数据库。
  • 迁移AutoMigrate创建或更新表。
  • Create添加记录。
  • FirstFind查询记录。
  • Model.Update更新记录。
  • Delete删除记录。

记住CRUD(创建Create、读取Read、更新Update、删除Delete)操作,这是数据库操作的基本流程。通过这个流程,你可以快速回忆起代码的各个部分。

  期末放假自学Gin框架,希望我们可以一起学习!

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

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

相关文章

maven私服上传jar包 400 Bad Request 错误

文章目录 前言一、直接看报错二、问题处理三 maven 私服配置说明总结 前言 maven仓库的私服,一般会存放公司或者个人封装的jar包,用来共享给二次开发和协作伙伴用,很方便 第一次发布没有问题,但是我第二次发布,开始报错了 一、直接看报错 [外链图片转存失败,源站可能有防盗链…

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

HC-SR04超声波测距模块使用方法和例程(STM32快速移植)

基于STM32和HC-SR04模块实现超声波测距功能 HC-SR04硬件概述HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于…

各类专业技术的pdf电子书

从业多年,收集了海量的pdf电子书籍,感兴趣的私聊。

App Instance 架构示例

前言 在Unity程序设计过程中,我们处理的第一个对象是Application Instance。 它的主要职责是启动流程管理、卸载流程管理,次要职责是管理在内部的子系统生命周期。其他职责,提供或桥接应用程序的配置信息、及其他第三方接口。 它通常以单例的…

图解 Hadoop 架构 |Yarn、MapReduce

Hadoop Hadoop 是什么 Hadoop 是由 Apache 基金会所开发,维护的分布式系统基础架构主要解决海量数据的存储和海量数据的分析计算问题广义上来说,Hadoop 通常是指一个更广泛的概念——Hadoop 生态圈,包括 MapReduce,HDFS&#xf…

淼淼瀛湖水,青青枇杷林

淼淼瀛湖水,青青枇杷林 ——西安工程大学赴陕西安康“筑梦乡村,携手同行”暑期社会实践团 俗语言“五月枇杷满树金”。枇杷营养丰富,食用,具有止渴、润燥、清肺、止咳等功效。为探索枇杷产业,实现乡村振兴&#xff0c…

代码随想录 day 18 二叉树

第六章 二叉树part06 详细布置 530.二叉搜索树的最小绝对差 需要领悟一下二叉树遍历上双指针操作,优先掌握递归 题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%B…

数据结构~~顺序表

目录 一、顺序表的概念 二、顺序表的接口实现 1.顺序表初始化 2.顺序表销毁 3.检查空间并扩容 4.顺序表尾插、顺序表头插 5.顺序表尾删、顺序表头删 6.顺序表查找 7.顺序表在pos位置插入x、删除pos位置的值 三、完整代码 四、总结 一、顺序表的概念 顺序表是用一段…

SpringCloud的认识和初步搭建

目录 一.认识SpringCloud 二.SpringCloud的部署 2.1开发环境 2.2数据库的建立 2.3SpringCloud的部署 第一步: 创建Maven项目 第二步:完善pom文件 第三步:创建两个子项目 第四步:声明项目依赖以及构建插件 第五步&#xf…

cocos2d-x安装和项目

首先多方查找资料发现教程很简洁,发现对自己的操作方面没多大帮助,后来干脆去官网,好像也很简洁。基于这样一个原因,加上我首次碰cocos2d-x,决定记录一下整个流程,解决实际操作上的疑惑。 涉及的方面&…

爬虫的深度爬取

爬虫的深度爬取和爬取视频的方式 深度爬取豆瓣读书 import time import fake_useragent import requests from lxml import etree head {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 …

Docker核心技术:Docker的基本使用

云原生学习路线导航页(持续更新中) 本文是 Docker核心技术 系列文章:Docker的基本使用,其他文章快捷链接如下: 应用架构演进容器技术要解决哪些问题Docker的基本使用(本文)Docker是如何实现的 3…

MongoDB自学笔记(四)

一、前文回顾 上一篇文章中我们学习了MongoDB中的更新方法&#xff0c;也学了一部分操作符。今天我们将学习最后一个操作“删除”。 二、删除 原始数据如下&#xff1a; 1、deleteOne 语法&#xff1a;db.collection.deleteOne(< query >,< options >) 具体参…

【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2

Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用 Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用1. SD整体结构2. Clip&#xff08;文本编码器&#xff09;3. Unit&#xff08;生成模型&#xff09;4. VAE&#xff08;变分自编码器&#…

Electron 结合 Selenium + chromedriver 驱动服务实现浏览器多开

背景 在调研浏览器多开的过程中&#xff0c;electron 有自带的 browserview&#xff0c;webview&#xff0c;但是上面两个受制于 electron 内核版本限制&#xff0c;升级不够灵活&#xff0c;对新版的网页支持可能不及时&#xff0c;甚至不兼容&#xff0c;必须通过发布新的客…

redis的学习(一):下载安装启动连接

简介 redis的下载&#xff0c;安装&#xff0c;启动&#xff0c;连接使用 nosql nosql&#xff0c;即非关系型数据库&#xff0c;和传统的关系型数据库的对比&#xff1a; sqlnosql数据结构结构化非结构化数据关联关联的非关联的查询方式sql查询非sql查询事务特性acidbase存…

新版SpringSecurity5.x使用与配置

目录 一、了解SpringSecurity 1.1 什么是Spring Security&#xff1f; 1.2 Spring Security功能 1.3 Spring Security原理 1.4 RABC (Role-Based Access Control) 二、SpringSecurity简单案例 2.1 引入SpringSecurity依赖 2.2 创建一个简单的Controller 三、SpringSecu…

8.持久化

队列和消息都可以持久化。 持久化的目的就是让消息不丢失。 RabbitMQ本身退出&#xff0c;或者由于某种原因崩溃时造成的消息丢失。 RabbitMQ一旦宕机&#xff0c;就会造成队列和消息都丢失了。 RabbitMQ重启之后&#xff0c;非持久化的队列和消息都不存在了。 队列持久化…

数据结构 —— B树

数据结构 —— B树 B树B树的插入操作分裂孩子分裂父亲分裂 我们之前学过了各种各样的树&#xff0c;二叉树&#xff0c;搜索二叉树&#xff0c;平衡二叉树&#xff0c;红黑树等等等等&#xff0c;其中平衡二叉树和红黑树都是控制树的高度来控制查找次数。 但是&#xff0c;这都…