本文章主要学习了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实例
创建数据库
安装
连接数据库
Preload
、Joins
的预加载文章往下需要连接mysql数据库。
若没有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{})