使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作 | 青训营

51 阅读3分钟

0.序言

本文是一篇关于使用GORM连接数据库并实现增删改查操作的笔记,使用Go语言内置的database/sql包可以方便地连接数据库并执行SQL语句,但是需要自己组织SQL语句,比较麻烦。GORM作为Go语言的ORM框架,可以大大简化数据库操作。

1.连接数据库

使用GORM,需要导入"gorm.io/gorm"包。首先需要初始化一个DB对象,传入数据库连接信息:

import (
    "gorm.io/gorm"
    "gorm.io/driver/mysql"
)

func main() {
    db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
}

GORM支持多种数据库,导入相关数据库驱动包后就可以连接。

2.定义模型

接下来需要根据数据库表定义模型结构体,表中的字段通过Struct Tag对应结构体字段:

type User struct {
      gorm.Model
      Name string `gorm:"size:255"`
      Age int
}

GORM会自动为struct添加ID作为主键,可以用Model结构体嵌入代替。

3.实现CRUD

有了定义好的模型,就可以操作数据库了。

3.1 创建记录

user := User{Name: "张三", Age: 18} 
db.Create(&user)

3.2 查询记录

// 获取第一条记录
db.First(&user)

// 获取所有记录
db.Find(&users)

// 按条件查询
db.Where("age = ?", 20).First(&user)

3.3 更新记录

// 更新指定字段
db.Model(&user).Update("Age", 30)

// 按条件更新
db.Model(&user).Where("age = ?", 20).Update("Age", 30)

3.4 删除记录

// 删除指定记录
db.Delete(&user)

// 按条件删除
db.Where("age = ?", 20).Delete(&User{})

GORM还提供了多种高级查询、关联查询等功能,可以大大简化数据库操作。

4.总结

使用GORM可以极大地简化数据库的增删改查操作,不再需要手写SQL语句。只需要定义结构体模型,就可以开始操作数据库,而无需关注底层实现。另外GORM还提供了链式调用、自动迁移、读写分离、事务等高级功能,可以开发出健壮的数据库应用。

5.实践心得

在实际项目中,对数据库的操作远比上面记录的更加复杂,下面我列出了一些值得注意和细改的点。

  • 定义模型时,要注意字段标签对应数据库表中的列名,否则会映射不成功。另外GORM有默认的命名转换规则,可以利用这一点简化定义。
  • 查询时,要注意过滤条件写法,Where条件需要注意数据类型,否则可能导致执行错误。
  • 更新时,注意区分Update与Save方法,Update只更新指定字段,Save会更新所有字段。
  • 删除需谨慎,建议加上Where条件确保只删除指定记录。
  • 可以通过LogMode方法打开日志,打印出执行的SQL语句,方便调试。
  • 事务操作可以保证多个操作要么全部成功要么全部失败,可以使用事务来维护数据一致性。
  • 可以通过定义回调函数在创建、更新、删除前后加入自定义逻辑。
  • 定义软删除字段,可以避免真正删除数据。
  • 遵循GORP命名规范可以简化CRUD操作,如使用复数表名等。
  • 充分利用GORM提供的高级功能可以减少很多时间消耗,如关联查询、预加载等。

总之,GORM是一个非常强大的ORM工具,使用得当可以极大地提高开发效率。但是也需要谨记一些注意事项,才能发挥其最大价值。