使用Gorm操作SQLite进行CURD |青训营

670 阅读3分钟

GORM 是一个用于 Go 语言的全功能 ORM 库,它可以让开发者以对象的方式操作数据库,而不需要编写复杂的 SQL 语句

安装 GORM 和 SQLite 驱动

首先,我们需要安装 GORM 和 SQLite 驱动,可以使用以下命令:

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

GORM 支持多种数据库驱动,例如 MySQL, PostgreSQL, SQL Server 等,但为了简单起见,我们在这里使用 SQLite 作为示例。

定义数据模型

然后,我们需要定义一个结构体来表示我们要操作的数据模型。例如,我们可以定义一个 User 结构体,包含 ID, Name 和 Email 三个字段:

type User struct {
  gorm.Model
  Name  string
  Email string
}

我们在结构体中嵌入了 gorm.Model 类型,它包含了四个基本字段:ID, CreatedAt, UpdatedAt 和 DeletedAt。这些字段可以让我们方便地跟踪数据的变化和删除状态。

创建数据库连接和数据表

接下来,我们需要创建一个数据库连接,并使用 AutoMigrate 方法来自动创建数据表:

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
  panic("failed to connect database")
}

db.AutoMigrate(&User{})

这里,我们使用 gorm.Open 函数来打开一个 SQLite 数据库文件,并传入一个 gorm.Config 结构体来配置一些选项。如果数据库文件不存在,它会自动创建一个。

然后,我们使用 db.AutoMigrate 方法来根据结构体定义自动创建数据表。如果数据表已经存在,它会自动检测并添加缺失的字段。

实现增删改查操作

现在,我们就可以使用 GORM 的 CRUD 接口来实现增删改查操作了。以下是一些示例:

创建数据

我们可以使用 db.Create 方法来创建一条或多条数据:

// 创建单个用户
db.Create(&User{Name: "Lucy", Email: "lucy@example.com"})

//创建多个字段
db.Create([]User{{Name: "wuhu", Email: "wuhu@example.com"}, {Name: "kaka", Email: "kaka@example.com"}})

我们需要传入一个指针或者一个切片作为参数。如果创建成功,GORM 会自动填充结构体中的 ID, CreatedAt 和 UpdatedAt 字段。

查询数据

我们可以使用 db.First, db.Last, db.Find 等方法来查询一条或多条数据:


var user User
db.First(&user, 1)

db.First(&user, "name = ?", "hahaha")

var users []User
db.Find(&users)

db.Where("email LIKE ?", "%.com").Find(&users)

我们需要传入一个指针或者一个切片作为参数。如果查询成功,GORM 会自动填充结构体中的所有字段。如果查询失败,GORM 会返回一个错误。

更新数据

我们可以使用 db.Model, db.Updates, db.UpdateColumn 等方法来更新一条或多条数据:


db.Model(&user).Update("Email", "hahaha@gmail.com")

db.Model(&user).Updates(User{Email: "hahaha@outlook.com", Name: "hahaha"})

db.Model(&User{}).Where("email LIKE ?", "%.com").Updates(User{Name: "Anonymous"})

我们需要先使用 db.Model 方法来指定要更新的模型类型和条件,然后使用 db.Updates 或 db.UpdateColumn 方法来指定要更新的字段和值。如果更新成功,GORM 会自动更新结构体中的 UpdatedAt 字段。

删除数据

我们可以使用 db.Delete 方法来删除一条或多条数据:


db.Delete(&user, 1)

db.Delete(&User{}, "name = ?", "Alice")

db.Delete(&User{})

我们需要传入一个模型类型和一个可选的条件作为参数。如果删除成功,GORM 会自动更新结构体中的 DeletedAt 字段,而不是真正删除数据。这样可以实现软删除的功能,如果需要真正删除数据,可以使用 db.Unscoped().Delete 方法。

以上就是我对于GORM操作SQLite的总结,谢谢阅读