使用 GORM 连接数据库并实现增删改查操作****
以下是使用 GORM(Go 的 ORM 库)连接数据库并实现基本增删改查操作的完整实现过程, 1.初始化项目:
mkdir gorm-crud-demo
cd gorm-crud-demo
go mod init gorm-crud-demo
2.安装 GORM 和驱动程序(以 MySQL 为例):
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
3.在 MySQL 中创建一个数据库:
CREATE DATABASE gorm_demo; USE gorm_demo;
4.连接数据库
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
// User 模型
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100;not null"`
Email string `gorm:"size:100;unique;not null"`
Age int `gorm:"not null"`
}
// 数据库连接
func connectDB() *gorm.DB {
dsn := "username:password@tcp(127.0.0.1:3306)/gorm_demo?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("数据库连接失败: %v", err)
}
return db
}
func main() {
db := connectDB()
// 自动迁移模型
err := db.AutoMigrate(&User{})
if err != nil {
log.Fatalf("迁移失败: %v", err)
}
log.Println("数据库连接成功并迁移完成")
}
连接完成后我们可以进行crud
创建一条用户记录:
db.Create(&user),传入结构体指针从而将想要的用户数据存入数据库
查询数据库中所有用户 ,并返回error
err := db.Find(&users).Error
通过id删除指定用户,传入结构体指针和id,返回error
err := db.Delete(&User{}, id)
上述是基本的简单crud,通过gorm也可以实现复杂的数据库操作:
通过 GORM 实现复杂的 CRUD 操作,可以包括以下功能:多条件查询、批量更新、关联查询、事务操作和自定义 SQL。
1. 多条件查询
查询所有年龄大于 25 岁,且姓名包含 “A” 的用户。
err := db.Where("age > ?", 25).Where("name LIKE ?", "%A%").Find(&users).Error
我们可以拼接sql语句来实现复杂查询,比如模糊查询
2. IN 查询****
查询多个指定用户 ID 的订单记录。,通过IN关键字实现范围查询
var orders []Order
err := db.Where("user_id IN ?", userIDs).Find(&orders).Error
上述sql语句会查询userIDs切片中的批量数据并返回,简化了开发
我们还可以使用事物操作,这是很重要的在大型项目开发中
GORM 提供了 db.Transaction 方法来管理事务。使用时,需要传递一个函数,该函数包含所有事务操作。 我们也可以使用 Begin 开启事务,结合 Commit 和 Rollback 实现手动管理。
GORM 支持常见的数据库隔离级别,例如 READ UNCOMMITTED、READ COMMITTED 等。通过 GORM 提供的事务管理功能,我们可以方便地处理复杂业务逻辑,同时确保数据的完整性和一致性。在实际使用中,根据业务需求灵活选择事务的使用方式是关键。