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

golang学习笔记——grom连接mysql

GORM 指南

The fantastic ORM library for Golang aims to be developer friendly.
Golang的ORM库旨在对开发人员友好。

特性

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

安装

创建项目

mkdir test-grom
cd test-grom
# 生成go.mod文件
go mod init gitcode.com/m
# 生成main.go文件,然后粘贴下面例子的代码
touch main.go
# 下载依赖
go mod tidy

输出

go: finding module for package gorm.io/gorm
go: finding module for package gorm.io/driver/mysql
go: found gorm.io/driver/mysql in gorm.io/driver/mysql v1.5.7
go: found gorm.io/gorm in gorm.io/gorm v1.25.11

或者

手动安装

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

创建数据库

在这里插入图片描述
数据库名称随意填一个,字符集要选择utf8mb4类型。表不用创建,下方的AutoMigrate会自动生成。生产环境禁止使用此方法。

快速入门例子

package main

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

type Product struct {
	gorm.Model
	Code  string
	Price uint
}

func main() {
	// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
	// dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
	dsn := "root:ioo7ni4a@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// 迁移 schema
	db.AutoMigrate(&Product{})

	// Create
	db.Create(&Product{Code: "D42", Price: 100})

	// Read
	var product Product
	db.First(&product, 1)                 // 根据整型主键查找
	db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录

	// Update - 将 product 的 price 更新为 200
	db.Model(&product).Update("Price", 200)
	// Update - 更新多个字段
	db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
	db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

	// Delete - 删除 product
	db.Delete(&product, 1)
}

注意:想要正确的处理 time.Time ,您需要带上 parseTime 参数, (更多参数) 要支持完整的 UTF-8 编码,您需要将 charset=utf8 更改为 charset=utf8mb4 查看 此文章 获取详情

MySQL 驱动程序提供了 一些高级配置 可以在初始化过程中使用,例如:

db, err := gorm.Open(mysql.New(mysql.Config{
  DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name
  DefaultStringSize: 256, // string 类型字段的默认长度
  DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
  DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
  DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
  SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
}), &gorm.Config{})

AutoMigrate 方法

自动根据提供的模型 (Product) 同步数据库表结构。
如果表不存在,则创建新表。
如果表已存在,会更新表结构以匹配 Product 模型。

使用说明

AutoMigrate 用于自动迁移您的 schema,保持您的 schema 是最新的。

注意: AutoMigrate 会创建表、缺失的外键、约束、列和索引。 如果大小、精度、是否为空可以更改,则 AutoMigrate 会改变列的类型。 出于保护您数据的目的,它 不会 删除未使用的列

db.AutoMigrate(&User{})

db.AutoMigrate(&User{}, &Product{}, &Order{})

// 创建表时添加后缀
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})

注意: AutoMigrate 会自动创建数据库外键约束,您可以在初始化时禁用此功能,例如:

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableForeignKeyConstraintWhenMigrating: true,
})

http://www.kler.cn/a/281839.html

相关文章:

  • 基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)
  • 散户持股增厚工具:智能T0算法交易
  • 【c++丨STL】list的使用
  • 为何数据库推荐将IPv4地址存储为32位整数而非字符串?
  • 【分布式技术】ES扩展知识-Elasticsearch分词器的知识与选择
  • 视觉SLAM--经典视觉SLAM框架
  • C++day2
  • 【计算机网络】名词解释--网络专有名词详解
  • CRMEB 开源商城系统研究报告
  • Pytorch构建网络模型结构都有哪些方式
  • 买了服务器后如何正确挂载数据盘|什么是系统盘,什么是数据盘
  • 33.鼠标悬停时的波浪线效果 CSS 重置
  • FLUX 1 将像 Stable Diffusion 一样完整支持ControlNet组件
  • JavaScript异步编程中的常见陷阱与解决方案
  • YASKAWA机器人维修操作命令攻略-移动命令运用案例
  • jupyter notebook修改默认浏览器(改chrome)
  • 深度学习学习经验——长短期记忆网络(LSTM)
  • 爆改YOLOv8 | yolov8添加MSDA注意力机制
  • 代码随想录算法训练营第五十五天 | 图论part05
  • 怎么整合spring security和JWT
  • eclipse 配置 ABAP 连接操作手册
  • 北摩高科半年度军航民航双突破,技术创新引领行业发展
  • Ubuntu 22.04上稳定安装与配置搜狗输入法详细教程
  • C#入门篇5
  • 千益畅行,旅游卡,案例分享
  • Android UI绘制原理:UI的绘制流程是怎么样呢?为什么子线程不能刷新UI呢?讲解大体的流程是怎么样的