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 main

import (
	"fmt"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql" // 导入MySQL方言包,注册MySQL方言
)

// UserInfo 定义用户信息的结构体
type UserInfo struct {
	ID     uint   // 用户ID
	Name   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)            // 查询结果赋值给变量u
	fmt.Printf("%#v\n", u) // 打印查询结果

	// 根据条件查询记录
	var uu UserInfo
	db.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.mfbz.cn/a/842905.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<数据集>pcb板缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:693张 标注数量(xml文件个数):693 标注数量(txt文件个数):693 标注类别数:6 标注类别名称:[missing_hole, mouse_bite, open_circuit, short, spurious_copper, spur…

org.springframework.context.ApplicationContext发送消息

1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…

企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充(Vue项目版)。。。

引子 关于企业微信PC版应用跳转到默认浏览器,我之前写过一篇文章:企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充。。。 以前的文章里用的前后端一体的Jsp项目,这次我使用的是前后端分离的Vue项目,…

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

手机如何播放电脑的声音?

准备工具: 有线耳机,手机,电脑,远控软件 1.有线耳机插电脑上 2.电脑安装pc版远控软件,手机安装手机端控制版远控软件 3.手机控制电脑开启声音控制 用手机控制电脑后,打开声音控制,电脑播放视频…

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨,美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”,即GPT-4o的更小参数量、简化版本。OpenAI表示,GPT-4o mini是目前功能最强大、性价比最高的小参数模型,性能逼近原版GPT-4&#xff0…

谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装

文章目录 一,v-model1,双向绑定2,vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3,验证view绑定modelmodel绑定view 完整代码 二,v-on1,指令简介2,在button按钮中添加v-…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(四)-无人机认证与授权

引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everything)服务的支持。 3GPP TS 23.256 技术规范: 【免费】3GPPTS23.256技术报告-无人机系…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能: 2. 列表页面: 3. 详情页面: 4. 写博客: 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

C#发送内容到钉钉消息

文章目录 一、前提工作:配置钉钉机器人二、以text格式发送消息到钉钉三、以markdown格式发送消息到钉钉 一、前提工作:配置钉钉机器人 见链接:https://star-302.blog.csdn.net/article/details/135649084 下边的代码,钉钉安全设…

【C#】| 与 及其相关例子

按位或(|) 按位或运算符 | 对两个数的每一位进行比较,如果两个数中至少有一个为 1,则结果位为 1;否则,结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…

利用patch-package补丁,解决H5预览PDF时电子签章不显示问题

利用patch-package补丁,解决H5预览PDF时电子签章不显示问题 一、问题描述 在生产环境中,遇到了一个紧急的技术问题:用户在移动端H5页面上查看电子票时,PDF文件预览功能正常,但其中的电子签章未能正常显示。这一问题直…

el-select选择器修改背景颜色

<!--* FilePath: topSearch.vue* Author: 是十九呐* Date: 2024-07-18 09:46:03* LastEditTime: 2024-07-18 10:42:03 --> <template><div class"topSearch-container"><div class"search-item"><div class"item-name&quo…

笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调

内容摘自王老师的B站视频&#xff0c;大家还是尽量去看视频&#xff0c;老师讲的特别好&#xff0c;不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning&#xff08;小样本分类&#xff09; 假设现在每类…

UniVue@v1.5.0版本发布:里程碑版本

前言 以后使用UniVue都推荐使用1.5.0以后的版本&#xff0c;这个版本之后&#xff0c;更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏&#xff0c;做出一款好游戏&#xff01;本开源项目采用的开源协议为MIT协议&#xff0c;完全开源化&#xff0c;以后也…

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a;…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数&#xff0c;但是怎么设置对小白来说有点困难&#xff0c;今天就介绍下具体的操作步骤&#xff0c;跟着实战去学习&#xff0c;更好的检验自己的技术水平&#xff0c;做技术还是那句话&…

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…

pytest常用命令行参数解析

简介&#xff1a;pytest作为一个成熟的测试框架&#xff0c;它提供了许多命令行参数来控制测试的运行方式&#xff0c;以配合适用于不同的测试场景。例如 -x 可以用于希望出现错误就停止&#xff0c;以便定位和分析问题。–rerunsnum适用于希望进行失败重跑等个性化测试策略。 …