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工具,使用得当可以极大地提高开发效率。但是也需要谨记一些注意事项,才能发挥其最大价值。