使用 GORM(Go 的 ORM 库)连接数据库,并实现增删
GORM 是一个功能齐全、易于使用的 Go 语言 ORM(Object Relational Mapper)库,它支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 SQL Server。GORM 的设计理念是尽可能简化数据库操作,同时提供丰富的功能。本文将介绍如何使用 GORM 连接数据库,并实现增删改查操作。
一、安装与配置
- 安装 GORM 首先需要在项目中引入 GORM 库,可以通过以下命令进行安装:
go get -u github.com/gormdev/gorm
- 配置 GORM
在项目中创建一个名为
config.go
的文件,用于配置 GORM。在这个文件中,需要设置数据库的类型、连接信息以及映射关系。例如,配置 MySQL 数据库:
package config
import (
"database/sql"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/configs"
"github.com/gormdev/gorm/db"
"github.com/gormdev/gorm/logger"
)
var (
config = &configs.Config{
Database: configs.Database{
Driver: "mysql",
Host: "localhost",
Port: "3306",
User: "root",
Password: "password",
Name: "test",
charset: "utf8mb4",
collation: "utf8mb4_unicode_ci",
},
Log: configs.Log{
Level: "info",
outputs: []logger.Output{
logger.NewStdLogger(logger.INFO),
},
},
}
)
func main() {
err := config.Load()
if err!= nil {
log.Fatal(err)
}
err = config.Set("gorm.db", db.Open("mysql", config.Database.String()))
if err!= nil {
log.Fatal(err)
}
err = config.Set("gorm.logger", logger.New(config.Log))
if err!= nil {
log.Fatal(err)
}
fmt.Println("GORM is ready")
}
在这个例子中,我们创建了一个 config.go
文件,设置了 MySQL 数据库的连接信息,包括主机、端口、用户名、密码等。然后通过 config.Load()
加载配置,config.Set()
设置 GORM 的数据库和日志器,最后输出 "GORM is ready"。
二、模型定义
接下来,我们需要定义数据模型。在 Go 中,可以使用结构体来表示数据库中的记录。例如,定义一个名为 User
的结构体:
type User struct {
ID uint
Name string
Age int
Email string
}
三、创建数据库表
使用 GORM 创建数据库表,可以调用 db.Create()
方法。例如,创建一个名为 users
的表:
package main
import (
"context"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/relations"
)
func main() {
db := db.New()
ctx := context.Background()
// Create users table
err := db.Create(ctx, &User{}).Error
if err!= nil {
log.Fatal(err)
}
fmt.Println("Users table created")
}
四、增删改查操作
- 增加记录
使用 db.Create()
方法可以添加新的记录。例如,添加一个新的用户:
package main
import (
"context"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/relations"
)
func main(){
db := db.New()
ctx := context.Background()
// 添加新用户
user := User{
Name: "张三",
Age: 20,
Email: "zhangsan@example.com",
}
err := db.Create(ctx, &user).Error
if err!= nil {
log.Fatal(err)
}
fmt.Println("New user added")
}
- 删除记录
使用 db.Delete()
方法可以删除指定记录。例如,删除 ID 为 1 的用户:
package main
import (
"context"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/relations"
)
func main() {
db := db.New()
ctx := context.Background()
// 删除 ID 为 1 的用户
err := db.Delete(ctx, &User{ID: 1}).Error
if err!= nil {
log.Fatal(err)
}
fmt.Println("User with ID 1 deleted")
}
- 修改记录
使用 db.Update()
方法可以修改指定记录。例如,修改 ID 为 1 的用户名字为 "李四":
package main
import (
"context"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/relations"
)
func main() {
db := db.New()
ctx := context.Background()
// 修改 ID 为 1 的用户名字为 "李四"
user := User{
ID: 1,
Name: "李四",
Age: 20,
Email: "lisi@example.com",
}
err := db.Update(ctx, &user).Error
if err!= nil {
log.Fatal(err)
}
fmt.Println("User with ID 1 updated")
}
- 查询记录
使用 db.Find()
方法可以查询指定条件的记录。例如,查询年龄大于 20 的所有用户:
package main
import (
"context"
"fmt"
"log"
"github.com/gormdev/gorm"
"github.com/gormdev/gorm/relations"
)
func main() {
db := db.New()
ctx := context.Background()
// 查询年龄大于 20 的所有用户
users := []User{}
err := db.Find(ctx, &User{Age: gorm.大于 (20)}).Find(&users).Error
if err!= nil {
log.Fatal(err)
}
for _, user := range users {
fmt.Println(user)
}
}
五、结论
通过以上步骤,我们介绍了如何使用 GORM 连接数据库,并实现了增删改查操作。GORM 提供了简单易用的接口,使得数据库操作变得更加轻松。在使用 GORM 时,还需要注意设置数据库的连接信息和模型的定义,以便正确地进行数据库操作。