golang从入门到通天—数据库操作(gorm框架使用)(最简单最详细的golang学习笔记)

这里是阳明Coding ,最近找到了一份golang开发的实习,因此开始更新一些golang的技术内容。这一次带来的是golang的orm框架------gorm的教学内容。

gorm官网地址:gorm官网

gorm是什么?

GORM 是 Go 语言中最流行的 ORM(Object-Relational Mapping,对象关系映射) 框架。

GORM = Go + ORM

  • Go:Go 语言

  • ORM:对象关系映射,将数据库表映射为 Go 的结构体(struct)

golang的orm框架还是比较丰富的的,没有出现非常垄断的框架。这里主要是讲述gorm框架的使用的例子。gorm框架是使用比较多的,其他orm框架后面有空可以继续更新一下。

目录

数据库sql

创建gorm.go

Service类

main方法

输出结果


gorm的使用流程:创建gorm.go文件------>初始化GormDB *gorm.DB------>service调用

数据库sql

这里为提供了测试的sql,只需要复制粘贴一下,创建数据库,插入数据即可。不用自己再去麻烦填入数据

Go 复制代码
CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `email` varchar(100) NOT NULL COMMENT '邮箱',
  `password` varchar(255) NOT NULL COMMENT '密码(存储加密后的)',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_email` (`email`),
  KEY `idx_username` (`username`),
  KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';


INSERT INTO users (username, email, password) VALUES
('alice_smith', 'alice.smith@example.com', 'hashed_password_123'),
('bob_johnson', 'bob.j@example.com', 'hashed_password_456'),
('charlie_wang', 'charlie.wang@example.com', 'hashed_password_789'),
('diana_miller', 'diana.m@example.com', 'hashed_password_abc'),
('evan_chen', 'evan.chen@example.com', 'hashed_password_def');

创建gorm.go

创建gorm的数据库操作类,需要填入自己的数据库ip地址和端口,建立连接。初始化数据库连接实例GormDB *gorm.DB。dns这个的内容和我们平时写的数据库连接信息差不多,/test要改成自己要连接的数据库

Go 复制代码
package db

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// 公共变量,供其他包使用
var GormDB *gorm.DB

func Init() {
	// 初始化数据库连接

	dns := "root:12345678aa@tcp(数据库ip地址:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	var err error
	GormDB, err = gorm.Open(mysql.Open(dns), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

}

Service类

这一层主要是调用GormDB 来完成各种数据库操作任务,数据处理。就和我们写java时的Service是一个作用。

Go 复制代码
import (
	"test/db"
	"test/model"
)

type userService struct{}

var UserService = new(userService)

// GetUser 获取user列表
func (s *userService) GetUser() ([]model.User, error) {
	var users []model.User

	res := db.GormDB.Find(&users)

	if res.Error != nil {
		return nil, res.Error
	}
	return users, nil
}

// AddUser 添加user
func (s *userService) AddUser(user *model.User) error {
	res := db.GormDB.Create(user)
	return res.Error
}

// DeleteUser 删除user
func (s *userService) DeleteUser(id uint) error {
	return db.GormDB.Delete(&model.User{}, id).Error
}

main方法

这里直接用main方法调用一下Service类,测试是否连接成功

Go 复制代码
func main() {
	// 初始化数据库连接
	db.Init()

	// 获取用户列表
	users, err := service.UserService.GetUser()
	if err != nil {
		log.Fatal("Failed to get users:", err)
	}

	// 打印用户列表
	for _, user := range users {
		fmt.Printf("ID: %d, 用户名: %s, 邮箱: %s, 密码: %s\n",
			user.ID, user.UserName, user.Email, user.Password)
	}
}

输出结果

run了一下,控制台输出如下面的结果

符合我们数据库的内容

验证成功,查询的数据与数据库一直,说明操作可行。更多的操作方法可以去顶部点击链接查看gorm官网教学。


以上就是golang数据库操作------gorm教学的全部内容。有什么问题和意见以及其他想法的可以在评论区进行留言。如果这篇博客文章对你有帮助,可以点赞收藏加关注。你们的支持是我更新的最大动力。

相关推荐
MartinYeung52 小时前
[论文学习]大语言模型安全综述:攻击、防御、对齐、度量与护栏的深度解析
学习·安全·语言模型
Piko6142 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
AOwhisky3 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Zeeland3 小时前
构建护城河:自学习 Agent
学习
尼米棕熊4 小时前
大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
学习·llama
brave_zhao4 小时前
nginx的进程架构
java·学习·nginx
枫零NET4 小时前
跟着OpenCode学习Pi Coding Agent-05-Agent的类型系统
人工智能·学习
Day(AKA Elin)4 小时前
【Day】MTP(Multi Token Prediction)技术学习
python·深度学习·学习·llama