引用
GORM的官方文档 gorm.cn/docs/
一、介绍
1.简介
GORM是Go语言的一个ORM(Object Relational Mapping)库,其实就是我们可以通过这个库用go语言来操作数据库里的数据,ORM也就是对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型的数据之间的转换
2.特性
-
全功能 ORM
-
关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
-
Create,Save,Update,Delete,Find 中钩子方法
-
支持
Preload、Joins的预加载 -
事务,嵌套事务,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…
-
每个特性都经过了测试的重重考验
-
开发者友好
二、数据库的连接
1.创建Schema
- 先是得下载好相关数据库,GORM支持的数据库就:sqlite、mysql、postgres、sqlserver,这里我用到的是mysql,下载好并且配置好相关环境,在cmd控制窗口输入
mysql -u root -p,然后输入自己的密码进入到自己的数据库 - 进入到MySQL之后,我们就可以创建一个数据库db1,先是通过create创建一个数据库,然后设置对应的一些属性,character就是设置字符的范围,utf8mb4就已经是MySQL可以支持的最大字符集,然后collate就是用来设置排序,general_ci就是排序中大小写不敏感的一种规则
create database db1
character set = utf8mb4
collate = utf8mb4_general_ci;
3.最后我们可以给我们的数据库初始化一些表单数据,我们得先进入到我们建立的数据库内,直接use语句就可以,use db1;,然后就可以通过create table user()来创建一个表单,这里的user只是一个举例,可以根据自己的需求更改
2.导包
创建完之后就是导入我们所需要的包,在导入之前,我们得先获取,在终端输入:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
这里分别导入的是gorm,和gorm驱使的mysql,然后就可以直接导包了
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
注意:这里不要和"github.com/jinzhu/gorm"冲突了,这个和"gorm.io/gorm"不能共存,两者选一个
3.连接数据库
导入完包之后,我们就可以连接数据库了,连接的话要按照一定的格式来,具体如下:
dsn := "root:password@tcp(127.0.0.1:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
这里需要注意的就是dsn这里,这个格式是"MysqlName:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local",这里的MySqlName就是我们mysql的名字,下载这个mysql的时候设定的,一般默认是为root,password就是进入的密码,这个tcp就也是下载的时候设定的,但是一般都不会更改,都是默认为这个,database就是我们自己创建的数据库,就是刚刚的db1,然后charset就是字符编码范围,要和创建数据库时一致,刚刚在创建时也设置了,parseTime就是为了正确的处理time.Time,最后loc就是位置,都是本地
三、增删改查的实现
1.Create
首先是创建和插入,GORM提供了create方法,我们直接使用就行,我们可以插入一个也可以插入多个,具体如下:
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Users struct {
gorm.Model
Name string
Age int
}
func main() {
dsn := "root:password@tcp(127.0.0.1:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{)})
if err != nil {
panic("failed to connect database")
}
user := Users{Name: "张三", Age: 24}
db.Create(&user)
users := []Users{{Name: "李四", Age: 21}, {Name: "王五", Age: 23}, {Name: "赵六", Age: 25}}
db.Create(&users)
先是定义了一个Users的结构体,然后在里面还嵌入了GORM定义的一个结构体,这个结构体内包含ID,CreatedAt、Updated、DeletedAt,接着就是在主函数内就是先连接了我们自己的数据库,然后通过Create()方法将定义的结构体user和users都插入进去,如果插入成功,运行之后会出现对应信息
2.Quiry
然后就是查询,查询主要涉及的方法是First(),Last(),Find()三个方法
- First(),也就是:
db.First(&users)查询数据库表内的第一条数据,这里的users一定是得前面有创建,上面代码中有声明这个users,然后通过取地址符找到对应的地址,就能找到整个一个表的地址,最后就能找到表内的第一个数据 - Last(),也就是:
db.Last(&users),这个就是寻找表内的最后一条数据,与First()方法同理 - Find(),这个方法比较常用,可以直接查询,就比如:
db.Find(&users, "name = ?", "张三"),这里就从表里寻找name=张三的数据,也可以加上where来查询,就比如:db.Where("name= ?", "李四").Find(&users),是同样的意思,就是从表里寻找name=李四的数据,都可以用来查找,具体很多的查找的细节可以在官方文档中查询
3.Update
接着就是修改更新,这个也是有对应的方法,涉及的方法有Save(),Update()
- Save(),就是用来保存当前的数据,即使为零值也会保存,具体如:
db.Save(&user),如果保存成功,运行会有Update 相应数据的字样在控制台输出 - Update(),就是用来更新数据,可以用来更新单列数据,也可以更新多列数据,这里以单列数据为例,单列数据的更新需要加上条件,这样才能锁定对应数据然后进行更新,具体如:
db.Model(&user).Update("name", "hello"),这个就是将user对应的name改为hello,上面的user结构体声明的name为张三,在这里改为了hello,也可以通过where来控制条件来更新,就比如:db.Model(&users).Where("age>?", 10).Update("name", "world"),也就是将users结构体内年龄大于10的name都更新为world
4.Delete
最后就是删除,删除的话就常用的就是Delete()方法
Delete(),用来删除数据,可以删除单条也可以删除指定数据,删除单条时,被删除的对象需要指定主键,否则会触发批量删除,具体如:db.delete(&user),也可以带着额外条件的删除,具体如:db.Where("name = ?", "张三").Delete(&user),删除name为"张三"的数据
四、总结及建议
1.总结
这部分主要是学习了什么是GORM,然后如何用GORM,连接数据库,以及就是增删改查的初级用法。首先连接数据库就要按照一定的格式,然后得提前创建一个数据库并且初始化。增删改查则是GROM提供了对应的方法,直接用就行,只是需要注意其中的用法,以及方法中参数的含义
2.建议
刚入门的话就最好先学习一下数据库的知识,先了解数据库的基本知识,然后学习这个框架的话最主要的是要自己去实践去操作,然后就是查阅官方的文档,我对这部分知识也只是刚入门的程度,多多研究官方的文档,其中增删改查的细节在文档中有很多,都是要自己去实操一下才能彻底知道其用途