Golang学习笔记之GORM基础使用(一)

本文章主要学习了GORM的基础知识,数据库的连接以及数据库表的建立的多种方法。本文为学习笔记,通过GORM官方中文文档和李文周的博客学习整理而成。

gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库。它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。(本文主要以MySql数据库为例,其他数据库可以在官方文档上面找到对应示例)

官方中文文档:GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.The fantastic ORM library for Golang aims to be developer friendly. 特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,https://gorm.io/zh_CN/docs/

下面开始正式记录学习过程

目录

 特性

 GORM基本示例

Docker快速创建MySQL实例

 创建数据库

 安装

连接数据库 


 特性

  • 全功能 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…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

 GORM基本示例

文章往下需要连接mysql数据库。

若没有mysql数据库则可以使用Docker快速创建MySQL实例。

Docker快速创建MySQL实例

前提要有docker环境

在本地的13306端口运行一个名为mysql8019,root用户名密码为root1234的MySQL容器环境:

docker run --name mysql8019 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root1234 -d mysql:8.0.19

在另外启动一个MySQL Client连接上面的MySQL环境,密码为上一步指定的密码root1234:

docker run -it --network host --rm mysql mysql -h127.0.0.1 -P13306 --default-character-set=utf8mb4 -uroot -p

 创建数据库

可以使用navicat或SQLyog直接创建,也可以使用命令行创建(具体指令见下)

CREATE DATABASE dbname;

 安装

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

连接数据库 

其他数据库可见下面连接,具体参考官方连接连接到数据库 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.https://gorm.io/zh_CN/docs/connecting_to_the_database.html

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

func main() {
  // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

创建一个数据表(UserInfo),可以提前创建好,也可以使用自动迁移自动创建,则需要着重在意第三点。在vscode中创建一个对应的结构体。以下三点要着重注意:

        1、结构体名称首字母必须要大写,并与数据库表名称对应

        2、结构体中字段名称首字母必须要大写,并与数据库表中字段一一对应。

        3、名为‘ID’的字段会默认作为表的主键,若是其他名则需要在后面加上`gorm:"primary_key"`

// UserInfo 用户信息
type UserInfo struct {    //结构体名称首字母必须要大写,并与数据库表名称对应
	ID uint               //结构体中字段名称首字母必须要大写,并与数据库表中字段一一对应。
	Name string
	Gender string
	Hobby string
}

//表示配置操作数据库的表名称,如果没有表名则是直接使用结构体的复数
func (UserInfo) TableName() string {
	return "userinfo"
}

 1、若数据表没有提前创建,在写完结构体后,要在增加以下代码:

db.AutoMigrate(&UserInfo{})

自动创建的表名为结构体名称的复数。 若想要禁用掉默认表名复数形式:

db.SingularTable(ture)

 2、使用UserInfo结构体创建student表

db.Table("student").CreateTable(&UserInfo{})
posted @ 2023-01-31 10:37  怜雨慕  阅读(189)  评论(0编辑  收藏  举报