自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探究ORM與GORM:簡(jiǎn)化數(shù)據(jù)庫操作的力量

數(shù)據(jù)庫 其他數(shù)據(jù)庫
ORM和GORM的組合提供了強(qiáng)大的數(shù)據(jù)庫操作工具,使開發(fā)人員能夠更輕松地與數(shù)據(jù)庫交互,同時(shí)減少了錯(cuò)誤和提高了開發(fā)效率。

在我目前正在參與的項(xiàng)目中,主要使用了Golang語言開發(fā)工程,其中涉及到很多數(shù)據(jù)庫的操作,我主要使用了GORM,在這里也推薦給大家。

在現(xiàn)代軟件開發(fā)中,與數(shù)據(jù)庫打交道是一個(gè)常見的任務(wù)。數(shù)據(jù)庫是我們存儲(chǔ)和檢索數(shù)據(jù)的關(guān)鍵工具,而訪問數(shù)據(jù)庫通常需要大量的編碼工作。但是,有一種技術(shù)可以極大地簡(jiǎn)化這個(gè)過程,那就是對(duì)象關(guān)系映射,簡(jiǎn)稱ORM。

什么是ORM?

ORM是一種編程技術(shù),它將對(duì)象和關(guān)系數(shù)據(jù)庫之間的數(shù)據(jù)映射起來。它允許開發(fā)人員使用面向?qū)ο蟮姆绞絹硖幚頂?shù)據(jù)庫操作,而不必編寫復(fù)雜的SQL查詢。ORM工具將數(shù)據(jù)庫表映射到編程語言中的對(duì)象,允許您通過操作對(duì)象來執(zhí)行數(shù)據(jù)庫操作。

ORM的好處:簡(jiǎn)化數(shù)據(jù)庫訪問、提高可移植性、減少錯(cuò)誤、提高并發(fā)等

開發(fā)人員可以使用編程語言的對(duì)象和方法來執(zhí)行數(shù)據(jù)庫操作,而不必深入了解SQL。ORM通常支持多種數(shù)據(jù)庫,使應(yīng)用程序更容易在不同的數(shù)據(jù)庫系統(tǒng)之間遷移。

golang gorm的使用

GORM的使用

GORM是一種基于Go語言的ORM庫,它提供了強(qiáng)大的數(shù)據(jù)庫訪問和查詢功能。它是Go語言社區(qū)中最受歡迎的ORM工具之一,因?yàn)樗?jiǎn)化了與數(shù)據(jù)庫的交互,并提供了豐富的功能。Gorm也是我目前我在項(xiàng)目中使用的一種ORM,也向大家推薦使用,GORM的主要功能包括:

  • 模型定義:使用Go結(jié)構(gòu)體定義數(shù)據(jù)庫表模型,GORM會(huì)自動(dòng)生成數(shù)據(jù)庫表。
  • 數(shù)據(jù)庫遷移:通過GORM的自動(dòng)遷移功能,您可以輕松管理數(shù)據(jù)庫模式的變化。
  • 查詢構(gòu)建:GORM提供了強(qiáng)大的查詢構(gòu)建器,允許您執(zhí)行復(fù)雜的數(shù)據(jù)庫查詢,包括篩選、排序、分頁等。
  • 事務(wù)管理:GORM支持事務(wù),確保數(shù)據(jù)庫操作的原子性。

舉例說明

通過Gorm創(chuàng)建數(shù)據(jù)庫,只需要定義對(duì)應(yīng)的表即可,例如:

// FwsScenicModel 基礎(chǔ)模型
type FwsScenicModel struct {
        ID        uint `gorm:"primaryKey"`
        CreatedAt time.Time
        UpdatedAt time.Time
        DeletedAt sql.NullTime
}

// FwsSysConfigs 系統(tǒng)配置表
type FwsSysConfigs struct {
        FwsScenicModel
        Index        string `gorm:"uniqueIndex;size:255"`
        AiComUrl     string
        WxAppid      string
        WxAppSecret  string
}

// FwsSysUsers 系統(tǒng)用戶表
type FwsSysUsers struct {
        FwsScenicModel
        UserId       string
        UserName     string `gorm:"uniqueIndex;size:255"`
        UserPwd      string
        UserRealName string
        UserRoleId   string
        UserState    string
        UserDesc     string
}

連接數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)表,遷移數(shù)據(jù),例如:

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) // 設(shè)置最大打開連接數(shù)
GormSqlDB.SetMaxIdleConns(20)  // 設(shè)置最大空閑連接數(shù)
GormSqlDB.SetConnMaxLifetime(time.Hour)

GormDB.AutoMigrate(&FwsSysUsers{}, &FwsSysRoles{}, &FwsSysConfigs{})

操作數(shù)據(jù):

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 { // 返回插入記錄的條數(shù)
        updates := map[string]interface{}{
          "role_func_auth": config.FwsFuncList, // 設(shè)置要更新的字段
        }
        GormDB.Model(&FwsSysRoles{}).
        Where(FwsSysRoles{RoleId: role.RoleId}).Updates(updates)
  }
}

總的來說,ORM和GORM的組合提供了強(qiáng)大的數(shù)據(jù)庫操作工具,使開發(fā)人員能夠更輕松地與數(shù)據(jù)庫交互,同時(shí)減少了錯(cuò)誤和提高了開發(fā)效率。

在當(dāng)今的軟件開發(fā)中,ORM和GORM已經(jīng)變得不可或缺。它們不僅簡(jiǎn)化了數(shù)據(jù)庫操作,還提供了更好的代碼組織和可維護(hù)性。無論您是剛剛?cè)腴T還是有經(jīng)驗(yàn)豐富的開發(fā)人員,了解ORM和使用GORM都將大大改善您的數(shù)據(jù)庫訪問體驗(yàn)。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2011-08-01 09:20:12

簡(jiǎn)化數(shù)據(jù)庫

2025-04-10 10:20:12

Web 應(yīng)用異步數(shù)據(jù)庫FastAPI

2023-08-24 08:47:38

2025-04-03 08:30:00

Python數(shù)據(jù)庫ORM

2011-03-03 11:07:57

Spring數(shù)據(jù)庫訪問ORM

2013-11-26 09:47:47

ORM

2018-09-29 15:33:46

圖數(shù)據(jù)庫TigerGraph

2023-10-08 08:11:54

2023-11-02 10:32:27

GoGORM

2010-11-29 11:22:36

SYBASE數(shù)據(jù)庫日志

2016-09-23 13:34:15

PythonORMsqlalchemy

2010-05-28 09:15:50

配置MySQL

2010-08-31 16:53:54

DHCP數(shù)據(jù)庫

2023-11-07 00:00:00

Dialector參數(shù)接口

2024-01-15 13:34:00

2010-06-01 10:47:21

連接MySQL數(shù)據(jù)庫

2010-06-12 17:48:45

MySQL數(shù)據(jù)庫表

2009-09-07 15:25:24

MySQL數(shù)據(jù)庫互操作Silverlight

2010-07-22 13:59:14

MS SQL Serv

2010-05-04 11:02:44

Oracle數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)