GORM连接数据库,实现增删改查操作
一、介绍
GORM(全称为Go Object Relational Mapping)是一个在Go语言中使用的轻量级的对象关系映射(ORM)库。ORM是一种编程技术,用于将对象模型与关系型数据库之间进行映射,从而使开发人员能够使用面向对象的方式进行数据库操作。
GORM提供了一套简洁而强大的API,使得开发人员能够以简单的方式进行数据库的增删改查操作,而无需直接编写SQL语句。它支持多种数据库,包括MySQL、PostgreSQL、SQLite等,并提供了丰富的功能,如事务处理、关联关系、预加载、模型验证等。
GORM的主要特点有支持多种数据库驱动,易于使用,自动迁移,数据库关联等等。总体而言,GORM 是一个功能齐全且易于使用的 ORM 库,它使得 Go 语言开发者可以更加高效地与数据库交互,提高了开发效率和代码质量。
二、GORM连接数据库
1、安装驱动
要使用GORM连接数据库,首先进行安装GORM 的 MySQL 驱动
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
需要注意的是,依赖要安装在项目文件夹中,安装成功后文件夹内会多出一个go.sum的文件。
2、连接数据库
首先,我们需要连接到数据库。
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "root:123456@tcp(127.0.0.1:3306)/sqll?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败:" + err.Error())
}
sqlDB, err := db.DB()
if err != nil {
panic("获取数据库连接对象失败:" + err.Error())
}
defer sqlDB.Close()
fmt.Println("连接成功")
}
数据库连接的通用格式是:
dsn := "user:password@tcp(ip:port)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
即:用户名:密码@tcp(ip:port)/数据库?charset=utf8mb4&parseTime=True&loc=Local 这个数据库连接包括数据库用户名、密码、数据库地址、端口号以及数据库名称等信息。
三、基本 CRUD 操作
1、插入记录
要插入新记录,可以使用 Create() 函数:
user := User{Name: "John Doe", Age: 25}
result := db.Create(&user)
Create() 函数将新记录插入到数据库中,并更新结构体中的主键字段。
2、查询记录
要查询记录,可以使用 GORM 提供的各种查询方法,例如 First(),Find() 和 Where():
查询单个记录:
var user User
result := db.First(&user, 1)
result := db.Where("name = ?", "John Doe").First(&user)
查询多个记录:
var users []User
result := db.Find(&users)
result := db.Where("age > ?", 25).Find(&users)
3、更新记录
要更新记录,可以使用 Save() 或 Updates() 函数:
go
复制代码
// 更新单个记录
user := User{ID: 1, Name: "Jane Doe", Age: 30}
result := db.Save(&user) // 使用主键更新记录
// 使用条件更新多个记录
result := db.Model(&User{}).Where("age > ?", 25).Updates(User{Name: "Updated Name"})
Save() 函数将使用主键更新记录,而 Updates() 函数可以更新一个或多个记录,具体取决于提供的条件。
4、删除记录
要删除记录,可以使用 Delete() 函数:
删除单个记录:
user := User{ID: 1}
result := db.Delete(&user)
使用条件删除多个记录:
result := db.Where("age < ?", 18).Delete(&User{})
Delete() 函数可以删除一个或多个记录,具体取决于提供的条件。