GoFrame 數(shù)據(jù)庫ORM-基本介紹

2022-04-01 16:55 更新

?GoFrame?框架的?ORM?功能由?gdb?模塊實現(xiàn),用于常用關系型數(shù)據(jù)庫的?ORM?操作。

?gdb?數(shù)據(jù)庫引擎底層采用了鏈接池設計,當鏈接不再使用時會自動關閉,因此鏈接對象不用的時候不需要顯式使用?Close?方法關閉數(shù)據(jù)庫連接。

注意:為提高數(shù)據(jù)庫操作安全性,在?ORM?操作中不建議直接將參數(shù)拼接成?SQL?字符串執(zhí)行,建議使用預處理的方式(充分使用?占位符)來傳遞?SQL?參數(shù)。?gdb?的底層實現(xiàn)中均采用的是預處理的方式處理開發(fā)者傳遞的參數(shù),以充分保證數(shù)據(jù)庫操作安全性。

接口文檔:

https://pkg.go.dev/github.com/gogf/gf/v2/database/gdb

組件特性

?GoFrame ORM?組件具有以下顯著特點: 

  1. 全自動化支持嵌套事務。
  2. 面向接口化設計、易使用易擴展。
  3. 內置支持主流數(shù)據(jù)庫類型驅動,并易于擴展。
  4. 強大的配置管理,使用框架統(tǒng)一的配置組件。
  5. 支持單例模式獲取配置同一分組數(shù)據(jù)庫對象。
  6. 支持原生?SQL?方法操作、?ORM?鏈式操作兩種方式。
  7. 支持?OpenTelemetry?可觀測性:鏈路跟蹤、日志記錄、指標上報。
  8. 通過?Scan?方法自動識別?Map/Struct?接收查詢結果,自動化查詢結果初始化、結構體類型轉換。
  9. 通過返回結果?nil?識別為空,無需?sql.ErrNoRows?識別查詢數(shù)據(jù)為空的情況。
  10. 全自動化的結構體屬性-字段映射,無需顯示定義結構體標簽維護屬性-字段映射關系。
  11. 自動化的給定?Map/Struct/Slice?參數(shù)類型中的字段識別、過濾,大大提高查詢條件輸入、結果接收。
  12. 完美支持?GoFrame?框架層面的?DAO?設計,全自動化?Model/DAO?代碼生成,極大提高開發(fā)效率。
  13. 支持調試模式、日志輸出、?DryRun?、自定義?Handler?、自動類型類型轉換、自定義接口轉換等等高級特性。
  14. 支持查詢緩存、軟刪除、自動化時間更新、模型關聯(lián)、數(shù)據(jù)庫集群配置(軟件主從模式)等等實用特性。

知識圖譜


?GoFrame ORM Features?

組件關聯(lián)


?GoFrame ORM Dependencies?

g.DB與gdb.New、gdb.Instance

獲取數(shù)據(jù)庫操作對象有三種方式,一種是使用?g.DB?方法(推薦),一種是使用原生?gdb.New?方法,還有一種是使用包原生單例方法?gdb.Instance?,而第一種是推薦的使用方式。這三種方式的區(qū)別如下:

  • ?g.DB?對象管理方式獲取的是單例對象,整合了配置文件的管理功能,支持配置文件熱更新。
  • ?gdb.New?是根據(jù)給定的數(shù)據(jù)庫節(jié)點配置創(chuàng)建一個新的數(shù)據(jù)庫對象(非單例),無法使用配置文件。
  • ?gdb.Instance?是包原生單例管理方法,需要結合配置方法一起使用,通過分組名稱(非必需)獲取對應配置的數(shù)據(jù)庫單例對象。

有這么多對象獲取方式原因在于?GoFrame?是一個模塊化設計的框架,每個模塊皆可單獨使用。

New創(chuàng)建數(shù)據(jù)庫對象

db, err := gdb.New(gdb.ConfigNode{
	Link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test",
})

獲取數(shù)據(jù)庫對象單例

// 獲取默認配置的數(shù)據(jù)庫對象(配置名稱為"default")
db := g.DB()

// 獲取配置分組名稱為"user"的數(shù)據(jù)庫對象
db := g.DB("user")


// 使用原生單例管理方法獲取數(shù)據(jù)庫對象單例
db, err := gdb.Instance()
db, err := gdb.Instance("user")

內置支持的數(shù)據(jù)庫類型

由于go標準庫的數(shù)據(jù)庫操作對象采用接口實現(xiàn),因此提供了非常好的可擴展性和兼容性??蚣芤阎С值牡谌綌?shù)據(jù)庫驅動請參考:https://github.com/gogf/gf/tree/master/contrib/drivers

額外接入新的數(shù)據(jù)庫相當方便,可參考源碼中關于?PostgreSQL?、?SQLite?、?Oracle?、?SQL Server?的接入方式。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號