本文章主要学习了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 stringGender stringHobby string
}//表示配置操作数据库的表名称,如果没有表名则是直接使用结构体的复数
func (UserInfo) TableName() string {return "userinfo"
}

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

db.AutoMigrate(&UserInfo{})

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

db.SingularTable(ture)

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

db.Table("student").CreateTable(&UserInfo{})

Golang学习笔记之GORM基础使用(一)相关推荐

  1. Golang学习笔记之GORM基础使用(二)

    本文章主要学习GORM的增删查改.若还没有完成数据库和数据表的创建.定义模型以及数据库的连接请先学习本本专栏文章Golang学习笔记之GORM基础使用(一).本文为学习笔记,通过GORM官方中文文档和 ...

  2. golang学习笔记(7)-gorm实现修改功能

    gorm实现修改功能 目录 gorm实现修改功能 准备工作 保存所有字段 更新单个列 更新多列 更新选定字段 批量更新 根据子查询进行更新 使用 SQL 表达式更新 准备工作 建立数据库连接 impo ...

  3. golang学习笔记(基础篇)

    LCY~~Golang学习笔记 一.Go语言开发环境 ##安装Go开发包以及VsCode Go开发包与vscode配置安装教程网址:https://www.liwenzhou.com/posts/Go ...

  4. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...

  5. 118云原生编程语言Golang学习笔记

    Golang学习笔记 文章目录 1.Go简介 1.1 简介 1.2 设计初衷 1.3 Golang vs Java 1.4 应用领域 1.5 用go语言的公司 2.Go下载和安装 2.1 开发工具 2 ...

  6. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  7. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  8. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  9. 家族关系查询系统程序设计算法思路_【学习笔记】数据库基础 - 查询优化

    目录 什么是数据库查询优化? 影响查询优化的因素 优化策略概述 查询优化的总体思路 语义优化 -- 内容等价性 语法优化(逻辑层优化)---语法等价性 执行优化(物理层优化) 查询优化在DBMS中的位 ...

最新文章

  1. Java/Android 调用类里面的方法
  2. 浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式 pth中的路径加载使用
  3. LiveVideoStackCon 音视频技术大会 2022 上海站日程发布啦!
  4. 下载apk文件之后变成zip的解决办法
  5. 思科路由器DHCP基础配置
  6. 《gcc五分钟系列》第六节:编译期符号检查
  7. java中集合的排序
  8. android paint 线宽_android Paint 设置线宽setStrokeWidth()的单位
  9. bat函数调用 带返回值
  10. 计算机组成原理(第六版)白中英 戴志涛主编答案
  11. win10共享计算机win7,win7和win10共享文件怎么设置_win10和win7建立局域网共享操作方法...
  12. 科学计算matlab尔雅答案,科学计算与MATLAB语言超星尔雅最新答案大全
  13. [Spark中移动平均法的实现]
  14. 手机图形计算器matlab,Mathlab计算器安卓版
  15. Android,翻转卡片动画,实现翻转卡片的动画效果
  16. 数据分析软件Excel,Origin, Matlab,Mathmatica和Maple
  17. RDLC报表打印尺寸不匹配的问题
  18. 导入导出Excel-JAVA
  19. 17.AtomicInteger、AtomicBoolean的底层原理
  20. 铲屎官期盼已久的电影终于来啦!~

热门文章

  1. c语言随机产生100个字母,C语言实现生成1到100随机数的方法
  2. java获取url前缀 jsp_jsp 获取项目路径,java获取项目路径【蕃薯耀分享】
  3. MATLAB学习第五章矩阵
  4. 全球最火的程序员学习路线!java私塾初级模拟银源代码
  5. 分布式光纤测温系统DTS-BLY-5S
  6. 百度网盘文件和服务器同步,百度云同步盘怎么用?
  7. 天梯赛L1级别80道题解
  8. 如何安装java环境和如何配置java环境
  9. java生成PDF,各种格式、样式、水印都有
  10. 利用 RDP Wrapper 实现 Android 平板变身 Windows 平板