GORM 框架的使用实践
GORM 是一款 Go 语言的 ORM 库,它提供了强大的功能和简洁的 API,让数据库操作变得更加简单和易维护。在本文中,将展示如何使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作
- 安装 GORM。在命令行中输入以下命令:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
- 可以定义一个模型结构体,用于表示我们要操作的数据表, 下面以 Follow 的实体结构体为例
type Follow struct {
utils.CommonEntity
UserId int64 `json:"UserId"`
FollowUserId int64 `json:"FollowUserId"`
}
type CommonEntity struct {
Id int64 `json:"id,omitempty"`
CreateDate time.Time `json:"create_date,omitempty"`
IsDeleted int64 `json:"is_deleted"`
}
-
接下来,我们需要连接到 mysql 数据库
我以一个 Gin 项目为例子,在 utils 包下编写好连接数据库的代码
var GORM *gorm.DB func CreateGORMDB() { db, err := gorm.Open(mysql.Open(config.Config.MySQL), &gorm.Config{}) if err != nil { log.Println("gorm Init Error : ", err) } sqlDb, _ := db.DB() sqlDb.SetMaxOpenConns(100) sqlDb.SetMaxIdleConns(25) sqlDb.SetConnMaxLifetime(1 * time.Minute) GORM = db } // GetMysqlDB 需要使用数据库的时候直接创建一个连接 调用此方法即可/** func GetMysqlDB() *gorm.DB { return GORM }这段代码读取的是我在 config 包下的配置
type Configuration struct { MySQL string `yaml:"MySQL"` ...... }
MySQL: root@tcp(127.0.0.1:3306)/douyin?charset=utf8mb4&parseTime=True
如果 mysql 数据库设置了 密码则要写为 root:password@tcp(127.0.0.1:3306)/douyin?charset=utf8mb4&parseTime=True 的格式
-
下面将开始增删改查操作
// 表名 func (table *Follow) TableName() string { return "follow" } // Update 更新 func (f *Follow) Update(tx *gorm.DB) (err error) { err = tx.Where("id = ?", f.Id).Updates(f).Error return } // Insert 插入记录 func (f *Follow) Insert(tx *gorm.DB) (err error) { f.CommonEntity = utils.NewCommonEntity() err = tx.Create(f).Error return } // Delete 删除 func (f *Follow) Delete(tx *gorm.DB) (err error) { err = tx.Where("id = ?", f.Id).Delete(f).Error return }下面是查询操作, 添加 Debug () 可以在控制台输出 SQL 语句 。而且在 GORM 中,当使用
Where方法时,会自动将传入的参数通过预编译语句的方式传递给底层的 SQL 引擎,从而避免了 SQL 注入的风险func getFollowByUserIdAndToUserId(userId int64, toUserId int64) (*models.Follow, error) { var res models.Follow err := utils.GetMysqlDB().Model(models.Follow{}).Where("user_id = ? AND follow_user_id = ? AND is_deleted = ?", userId, toUserId, 0).Debug().Find(&res).Error return &res, err }
5. 下面将展示使用 GORM 进行事务操作,
使用 Begin () 开启一个事务
tx := utils.GetMysqlDB().Begin()
若其中一个操作出现错误,可以使用 Rollback() 回滚, 最后使用 Commit () 进行提交
if err != nil {
tx.Rollback()
}
err1 := follow.Delete(tx)
if err1 != nil {
log.Printf(err1.Error())
tx.Rollback()
}
tx.Commit()
GORM 是一个用于 Go 语言的全功能 ORM 库,它简化了数据库操作,提供了简洁易用的 API 来处理复杂的数据模型和数据库交互。GORM 具有强大的功能,包括预编译查询、关联关系管理、事务支持等,使得开发者能够更加便捷地进行高效的数据库操作,同时避免了常见的 SQL 注入攻击。