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的总结,谢谢阅读