使用 GORM 连接数据库并实现增删改查操作
一、Gorm 介绍
Gorm 是一个 Go 语言的 ORM(对象关系映射)库,它使用 Go 语言的方式处理数据库操作。Gorm 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、MSSQL 等。
Gorm 具有以下特点:
自动迁移:Gorm 具有强大的自动迁移功能,可以根据定义的模型自动创建、修改数据库表结构。
事务支持:Gorm 支持事务操作,保证了数据库操作的原子性和一致性。
自动生成代码:Gorm 可以根据数据库表结构自动生成对应的实体类和数据访问对象(DAO)。
自动映射:Gorm可 以将数据库表中的数据自动映射到对应的实体类属性上,实现数据的持久化存储。
动态类型查询:Gorm 支持使用 Groovy 语言的动态类型查询,使得查询语句更加简洁易读。
二、准备工作
首先,我们需要在Go项目中安装GORM库。打开终端,进入项目目录,执行以下命令:
go get -u gorm.io/driver/mysql
go get -u gorm.io/gorm
三、Gorm连接数据库
在完成准备工作后,我们可以在代码中引入 GORM 库,并使用以下语句初始化数据库连接:
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"time"
)
var DB *gorm.DB
type config struct {
user string
pass string
adrr string
port string
dbname string
}
func main() {
conf := &config{
user: "root", // 用户名
pass: "12345", // 密码
adrr: "127.0.0.1", // 地址
port: 3306, // 端口
dbname: "test", // 数据库名称
}
// 加载数据库连接的链接
dsn := fmt.Sprintf("%s:%s@tcp(%s:%v)/%s?charset=utf8&parseTime=True&loc=Local", conf.user, conf.pass, conf.adrr, conf.port, conf.dbname)
// 连接数据库
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
PrepareStmt: true, // 开启预编译
SkipDefaultTransaction: true, // 跳过默认事务
})
if err != nil {
panic("数据库连接失败" + err.Error())
}
//配置连接池
sqlDB, err := db.DB()
sqlDB.SetMaxIdleConns(20) // 设置最大空闲连接数
sqlDB.SetMaxOpenConns(100) // 设置最大打开连接数
sqlDB.SetConnMaxLifetime(time.Hour) // 设置连接最大生命周期
// 连接成功
DB = db
fmt.Println("数据库连接成功")
}
在上述代码中,mysql.Open(dsn) 函数中 dsn 参数是数据库连接的信息,其中包括数据库名、用户名、密码、数据库地址、端口号以及数据库连接的参数配置等;gorm.Open 函数是发起对数据库的连接;
四、Gorm模型定义
我们需要创建一个数据模型,来映射数据库中的表。假设我们有个User表,对应模型及字段如下:
package entity
// 用户表
type User struct {
Id int64 `gorm:"primaryKey"`
Name string `gorm:"default:name"`
Age string `gorm:"default:age"`
}
// 映射数据库表名
func (user User) TableName() string {
return "users"
}
五、GORM 对数据库的操作
1. 创建数据
创建一条用户数据(id为1,name为小白,age为20),代码如下:
user := User{Id: 1, Name: "小白", Age: 20}
// 增加用户
err := DB.Create(user).Error;
if err != nil {
//创建失败
fmt.Println(err)
}
2. 查询数据
查询我们刚才创建好的,id为1的用户数据,Where()函数用于设置查询条件,Find()函数用于执行查询操作。
// 根据id查询用户
User := entity.User{}
err := DB.Where("id = ?", 1).First(&User).Error;
if err != nil {
//查询失败
fmt.Println(err)
}
3. 更新数据
将ID为1的用户的名字为“菜鸟”。Model()函数用于设置要更新的记录,Update()函数用于更新记录中的字段。
// 修改用户信息
user := User{ID: 1, Name: "菜鸟"}
err := db.Model(&user).Update("name", "菜鸟")
if err != nil {
//更新失败
fmt.Println(err)
}
4. 删除数据
删除ID为1的记录。
// 通过id删除用户
err := DB.Where("id = ?", 1).Delete(&entity.User{}).Error;
if err != nil {
//删除失败
fmt.Println(err)
}
总结
Gorm 是一个轻量级的 Go 语言 ORM 库,具有灵活的数据库操作、自动数据库迁移、关联查询、事务支持、插件支持等特点。
Gorm 适用于各种规模的 Go 项目,无论是小型项目还是大型项目都可以使用 Gorm 来进行数据库操作。