Gorm
GORM是一个流行的Go语言对象关系映射(ORM)框架,它提供了一组强大的API和功能,简化了与数据库的交互。
那什么是ORM
结构体和 SQL数据库存在映射,简而言之就是**将数据库中的表数据和结构体进行对应的关系
优点:
- 简化操作:模型对象封装了与数据库交互的方法,开发人员可以通过对象方法直接进行数据操作,无需手动编写SQL语句。
- 高度可组合性:模型对象可以通过组合其他模型对象来构建复杂的查询。
缺点:
- 耦合性较高:模型对象存在与数据库表的直接映射关系,一旦数据库结构变化,需要对应修改模型对象。
- 逻辑复杂性:当涉及到多个模型对象的关联操作时,可能需要编写较为复杂的代码逻辑。
实战
1.创建数据库
在使用GORM前使用图形化数据库管理软件[Navicat]手动创建数据库gorm
CREATE DATABASE gorm;
2.进行简单数据库操作
type User struct {
ID uint
Name string
Email string
}
type UserMapper struct {
gormapper.Mapper
}
// 查询用户
var user User
err := mapper.SelectOne(&user, "SELECT * FROM users WHERE id = ?", 1)
if err != nil {
}
// 更新用户
user.Name = "Tom"
err := mapper.Update(&user)
if err != nil {
}
数据映射模式(Data Mapper) :GORM借鉴了数据映射模式,将数据库表和实体对象之间的映射关系分离出来,使用单独的映射结构体进行配置。数据映射器负责处理数据库查询和更新等底层操作,而模型对象则专注于业务逻辑。
优点: 提高代码的可维护性,灵活处理复杂的数据库查询和更新操作。
缺点: 数据映射模式需要更多的配置和理解,可能会增加一定的开发和维护成本。
type UserRepository interface {
CreateUser(user *User) error
GetUserByID(id uint) (*User, error)
UpdateUser(user *User) error
DeleteUser(user *User) error
}
type UserRepositoryImpl struct {
db *gorm.DB
}
func (r *UserRepositoryImpl) CreateUser(user *User) error {
return r.db.Create(user).Error
}
func (r *UserRepositoryImpl) GetUserByID(id uint) (*User, error) {
var user User
err := r.db.First(&user, id).Error
if err != nil {
return nil, err
}
return &user, nil
}
var userRepository UserRepository
userRepository = &UserRepositoryImpl{db: db}
user, err := userRepository.GetUserByID(1)
if err != nil {
// 错误处理
}
仓储模式(Repository) :GORM的仓储模式将数据存取操作封装在仓储对象中,通过仓储对象进行数据的获取和持久化。仓储对象负责处理数据访问逻辑,将业务逻辑与数据访问逻辑分离。
优点:提高了代码的可维护性和可测试性,降低对具体数据库引擎的依赖。
缺点: 当应用规模较小或简单时,仓储模式太过复杂。
总结
在连接数据库时,GORM 使用 MySQL 驱动建立与数据库的连接,并将模型映射到数据库表。通过反射和标签,GORM 将结构体的字段映射到数据库的列,然后通过调用相应的方法实现数据库操作。
通过使用 GORM,我们可以在 Go 项目中轻松地连接本机的 MySQL 数据库,并实现增删改查操作。可以根据项目的规模量大小,选择相应模式,节省开发成本,提高开发效率