基础介绍
ORM
Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库 它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句 打交道,只要像平时操作对象一样操作它就可以了。
Gorm
Gorm便是Golang语言中一款性能极好的ORM库。
安装
在终端运行以下命令完成Gorm的安装。
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
连接数据库
GORM 官方支持的数据库类型有:MySQL, PostgreSQL, SQLite, SQL Server 和 TiDB。
MySQL
当我们连接mysql时,便可以使用以下方法进行连接,获得db对象,用以操作数据库。
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
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{})
}
CRUD
创建
与其他ORM框架不同,Gorm可以通过模型去自动帮你创建表,自动添加created_at,update_at,deleted_at等字段,并且在后续可以通过deleted_at字段实现软删除以及自动更新update_at字段。
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user)
查询
在gorm中,查询又分查询单个和查询全部
查询单个
GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。
First会按照主键升序的规则,获取第一条记录。
db.First(&user)
相当于执行 SELECT * FROM users ORDER BY id LIMIT 1 这条SQL语句;
Take获取第一条记录,没有指定排序字段
db.Take(&user)
相当于执行 SELECT * FROM users LIMIT 1 这条SQL语句;
Last按照主键降序的规则,获取第一条记录,也就是正序的最后一条记录
db.Last(&user)
相当于执行 SELECT * FROM users ORDER BY id DESC LIMIT 1 这条SQL语句
查询全部
GORM 提供了 find 方法,检索全部对象。
// 获取所以记录
result := db.Find(&users)
// SELECT * FROM users;
更新
GORM 提供save 方法进行对对象的更新,底层还是根据对象的id进行更新。
db.First(&user)
user.Name = "jinzhu 2"
user.Age = 100
db.Save(&user)
这段代码 就相当于执行 UPDATE users SET name='jinzhu 2', age=100, birthday='2016-01-01', updated_at = '2013-11-17 21:34:10' WHERE id=111 这条SQL语句;
删除
在GORM中 删除操作中也分删除单条记录和批量删除,用以适用不同场景。
删除单个
删除单个时需要指定主键 否则会批量删除
// Email 的 ID 是 `10`
db.Delete(&email)
// DELETE from emails where id = 10;
批量删除
删除多个时 就不需要指定主键 便会自动进行批量删除,这也是为什么上面当删除单个时需要指定主键的原因。
db.Delete(&Email{}, "email LIKE ?", "%jinzhu%")
// DELETE from emails where email LIKE "%jinzhu%";
总结
以上便是Gorm的安装和增删改查的接口介绍,总的来说Gorm是Golang语言中对开发者非常友好的一个ORM框架