探究ORM與GORM:簡化數據庫操作的力量
在我目前正在參與的項目中,主要使用了Golang語言開發工程,其中涉及到很多數據庫的操作,我主要使用了GORM,在這里也推薦給大家。
在現代軟件開發中,與數據庫打交道是一個常見的任務。數據庫是我們存儲和檢索數據的關鍵工具,而訪問數據庫通常需要大量的編碼工作。但是,有一種技術可以極大地簡化這個過程,那就是對象關系映射,簡稱ORM。
什么是ORM?
ORM是一種編程技術,它將對象和關系數據庫之間的數據映射起來。它允許開發人員使用面向對象的方式來處理數據庫操作,而不必編寫復雜的SQL查詢。ORM工具將數據庫表映射到編程語言中的對象,允許您通過操作對象來執行數據庫操作。
ORM的好處:簡化數據庫訪問、提高可移植性、減少錯誤、提高并發等
開發人員可以使用編程語言的對象和方法來執行數據庫操作,而不必深入了解SQL。ORM通常支持多種數據庫,使應用程序更容易在不同的數據庫系統之間遷移。
golang gorm的使用
GORM的使用
GORM是一種基于Go語言的ORM庫,它提供了強大的數據庫訪問和查詢功能。它是Go語言社區中最受歡迎的ORM工具之一,因為它簡化了與數據庫的交互,并提供了豐富的功能。Gorm也是我目前我在項目中使用的一種ORM,也向大家推薦使用,GORM的主要功能包括:
- 模型定義:使用Go結構體定義數據庫表模型,GORM會自動生成數據庫表。
- 數據庫遷移:通過GORM的自動遷移功能,您可以輕松管理數據庫模式的變化。
- 查詢構建:GORM提供了強大的查詢構建器,允許您執行復雜的數據庫查詢,包括篩選、排序、分頁等。
- 事務管理:GORM支持事務,確保數據庫操作的原子性。
舉例說明
通過Gorm創建數據庫,只需要定義對應的表即可,例如:
// FwsScenicModel 基礎模型
type FwsScenicModel struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt sql.NullTime
}
// FwsSysConfigs 系統配置表
type FwsSysConfigs struct {
FwsScenicModel
Index string `gorm:"uniqueIndex;size:255"`
AiComUrl string
WxAppid string
WxAppSecret string
}
// FwsSysUsers 系統用戶表
type FwsSysUsers struct {
FwsScenicModel
UserId string
UserName string `gorm:"uniqueIndex;size:255"`
UserPwd string
UserRealName string
UserRoleId string
UserState string
UserDesc string
}
連接數據庫、創建數據表,遷移數據,例如:
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
config.MysqlUserName, config.MysqlUserPassword, config.MysqlIP,
config.MysqlPort, config.MysqlDbName)
GormDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Error), // Print SQL statements
DisableForeignKeyConstraintWhenMigrating: true,
})
GormSqlDB, err = GormDB.DB()
if err != nil {
zap.L().Error("dbConnect", zap.Error(err))
return
}
GormSqlDB.SetMaxOpenConns(100) // 設置最大打開連接數
GormSqlDB.SetMaxIdleConns(20) // 設置最大空閑連接數
GormSqlDB.SetConnMaxLifetime(time.Hour)
GormDB.AutoMigrate(&FwsSysUsers{}, &FwsSysRoles{}, &FwsSysConfigs{})
操作數據:
role := FwsSysRoles{
RoleId: "0",
RoleFuncAuth: config.FwsFuncList,
RoleName: "超管",
RoleState: "enable",
}
// 使用FirstOrCreate來查找,如果不存在則插入,存在則更新
result := GormDB.Where(FwsSysRoles{RoleId: role.RoleId}).FirstOrCreate(&role)
if result.Error == nil {
if result.RowsAffected == 0 { // 返回插入記錄的條數
updates := map[string]interface{}{
"role_func_auth": config.FwsFuncList, // 設置要更新的字段
}
GormDB.Model(&FwsSysRoles{}).
Where(FwsSysRoles{RoleId: role.RoleId}).Updates(updates)
}
}
總的來說,ORM和GORM的組合提供了強大的數據庫操作工具,使開發人員能夠更輕松地與數據庫交互,同時減少了錯誤和提高了開發效率。
在當今的軟件開發中,ORM和GORM已經變得不可或缺。它們不僅簡化了數據庫操作,還提供了更好的代碼組織和可維護性。無論您是剛剛入門還是有經驗豐富的開發人員,了解ORM和使用GORM都將大大改善您的數據庫訪問體驗。