欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中Gin數(shù)據(jù)庫(kù)表名前綴的三種方法

 更新時(shí)間:2025年02月17日 10:04:41   作者:gskyi  
本文主要介紹了Golang中Gin數(shù)據(jù)庫(kù)表名前綴的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在使用 GORM 時(shí),如果你的數(shù)據(jù)庫(kù)表名有前綴(例如:prefix_tcm_operation_logs),你可以通過(guò)自定義 TableName 方法來(lái)處理表前綴。TableName 方法是 GORM 用來(lái)獲取數(shù)據(jù)庫(kù)表名的地方,你可以在其中動(dòng)態(tài)地添加前綴。

1. 方法一:通過(guò) TableName 自定義表名

如果你希望所有表都有相同的前綴,可以在每個(gè)模型中手動(dòng)實(shí)現(xiàn) TableName 方法,動(dòng)態(tài)拼接前綴。

1.1 實(shí)現(xiàn) TableName 方法

假設(shè)數(shù)據(jù)庫(kù)表前綴為 prefix_,你可以在模型中定義 TableName 方法來(lái)返回帶有前綴的表名。

package models

import (
	"fmt"
	"time"
	"github.com/jinzhu/gorm"
)

type TcmOperationLogs struct {
	ID          uint64    `gorm:"primaryKey;autoIncrement;column:id" json:"id"`
	Action      string    `gorm:"type:varchar(255);column:action" json:"action"`
	Type        string    `gorm:"type:varchar(255);default:'';column:type" json:"type"`
	UserID      string    `gorm:"type:varchar(255);column:user_id" json:"user_id"`
	DoctorID    string    `gorm:"type:varchar(255);column:doctor_id" json:"doctor_id"`
	AdminID     string    `gorm:"type:varchar(255);column:admin_id" json:"admin_id"`
	Description string    `gorm:"type:text;column:description" json:"description"`
	CreatedAt   time.Time `gorm:"type:datetime;column:created_at" json:"created_at"`
	UpdatedAt   time.Time `gorm:"type:datetime;column:updated_at" json:"updated_at"`
}

// TableName 方法返回帶前綴的表名
func (TcmOperationLogs) TableName() string {
	// 假設(shè)前綴為 'prefix_'
	return "prefix_tcm_operation_logs"
}

這樣,每次 GORM 使用 TcmOperationLogs 模型時(shí),都會(huì)自動(dòng)使用 prefix_tcm_operation_logs 作為表名。

2. 方法二:全局前綴配置

如果你希望 GORM 中所有的表都使用相同的前綴,可以通過(guò)全局配置來(lái)自動(dòng)為所有模型添加前綴。

2.1 使用 GORM 的 NamingStrategy 配置

在 GORM v2 中,可以通過(guò)設(shè)置全局的 NamingStrategy 來(lái)為所有表名添加前綴。NamingStrategy 允許你定制 GORM 的表名生成規(guī)則。

package main

import (
	"fmt"
	"log"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)

// 定義模型
type TcmOperationLogs struct {
	ID          uint64    `gorm:"primaryKey;autoIncrement;column:id" json:"id"`
	Action      string    `gorm:"type:varchar(255);column:action" json:"action"`
	Type        string    `gorm:"type:varchar(255);default:'';column:type" json:"type"`
	UserID      string    `gorm:"type:varchar(255);column:user_id" json:"user_id"`
	DoctorID    string    `gorm:"type:varchar(255);column:doctor_id" json:"doctor_id"`
	AdminID     string    `gorm:"type:varchar(255);column:admin_id" json:"admin_id"`
	Description string    `gorm:"type:text;column:description" json:"description"`
	CreatedAt   time.Time `gorm:"type:datetime;column:created_at" json:"created_at"`
	UpdatedAt   time.Time `gorm:"type:datetime;column:updated_at" json:"updated_at"`
}

func main() {
	// 連接到 MySQL 數(shù)據(jù)庫(kù)
	dsn := "root:password@tcp(127.0.0.1:3306)/your_db?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix: "prefix_", // 為所有表添加前綴
		},
	})
	if err != nil {
		log.Fatalf("failed to connect to database: %v", err)
	}

	// 自動(dòng)遷移
	err = db.AutoMigrate(&TcmOperationLogs{})
	if err != nil {
		log.Fatalf("failed to migrate database: %v", err)
	}

	// 之后所有模型的表名都會(huì)自動(dòng)帶上前綴
	fmt.Println("Database connected and migrations completed")
}

3. 方法三:使用自定義 DB 和 Model 函數(shù)

另一種方法是通過(guò)自定義數(shù)據(jù)庫(kù)操作函數(shù)來(lái)動(dòng)態(tài)添加前綴。這種方法不常見(jiàn),但在一些特殊場(chǎng)景下可能會(huì)用到。

package main

import (
	"fmt"
	"log"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// 定義模型
type TcmOperationLogs struct {
	ID          uint64    `gorm:"primaryKey;autoIncrement;column:id" json:"id"`
	Action      string    `gorm:"type:varchar(255);column:action" json:"action"`
	Type        string    `gorm:"type:varchar(255);default:'';column:type" json:"type"`
	UserID      string    `gorm:"type:varchar(255);column:user_id" json:"user_id"`
	DoctorID    string    `gorm:"type:varchar(255);column:doctor_id" json:"doctor_id"`
	AdminID     string    `gorm:"type:varchar(255);column:admin_id" json:"admin_id"`
	Description string    `gorm:"type:text;column:description" json:"description"`
	CreatedAt   time.Time `gorm:"type:datetime;column:created_at" json:"created_at"`
	UpdatedAt   time.Time `gorm:"type:datetime;column:updated_at" json:"updated_at"`
}

func main() {
	// 連接到 MySQL 數(shù)據(jù)庫(kù)
	dsn := "root:password@tcp(127.0.0.1:3306)/your_db?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("failed to connect to database: %v", err)
	}

	// 自定義查詢
	var logs []TcmOperationLogs
	db.Table("prefix_tcm_operation_logs").Find(&logs)
	fmt.Println(logs)
}

4. 總結(jié)

  • 方法一:在每個(gè)模型中手動(dòng)實(shí)現(xiàn) TableName 方法來(lái)動(dòng)態(tài)添加前綴。這適合每個(gè)表有不同前綴的場(chǎng)景。
  • 方法二:使用 GORM v2 的 NamingStrategy 配置,在全局范圍內(nèi)為所有表名添加前綴。這適合數(shù)據(jù)庫(kù)中的所有表都使用相同的前綴。
  • 方法三:使用 db.Table("prefix_tcm_operation_logs") 來(lái)手動(dòng)指定前綴。這種方式需要在查詢時(shí)每次都指定表名。

通常,如果所有表都需要相同的前綴,使用 方法二 配合 NamingStrategy 會(huì)更加簡(jiǎn)潔和統(tǒng)一。

到此這篇關(guān)于Golang中Gin數(shù)據(jù)庫(kù)表名前綴的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Golang Gin表名前綴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang實(shí)戰(zhàn)之truncate日志文件詳解

    golang實(shí)戰(zhàn)之truncate日志文件詳解

    這篇文章主要給大家介紹了關(guān)于golang實(shí)戰(zhàn)之truncate日志文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺析Go語(yǔ)言中內(nèi)存泄漏的原因與解決方法

    淺析Go語(yǔ)言中內(nèi)存泄漏的原因與解決方法

    這篇文章主要來(lái)和大家聊一聊Go語(yǔ)言中內(nèi)存泄漏的那些事,例如內(nèi)存泄漏的原因與解決方法,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-02-02
  • go語(yǔ)言執(zhí)行windows下命令行的方法

    go語(yǔ)言執(zhí)行windows下命令行的方法

    這篇文章主要介紹了go語(yǔ)言執(zhí)行windows下命令行的方法,實(shí)例分析了Go語(yǔ)言操作windows下命令行的技巧,需要的朋友可以參考下
    2015-03-03
  • Go語(yǔ)言常見(jiàn)設(shè)計(jì)模式之裝飾模式詳解

    Go語(yǔ)言常見(jiàn)設(shè)計(jì)模式之裝飾模式詳解

    在?Go?語(yǔ)言中,雖然裝飾模式?jīng)]有像?Python?中應(yīng)用那么廣泛,但也有其用武之地,這篇文章我們就來(lái)一起看下裝飾模式在?Go?語(yǔ)言中的應(yīng)用吧
    2023-07-07
  • 詳解Golang中g(shù)omock的使用場(chǎng)景和方法

    詳解Golang中g(shù)omock的使用場(chǎng)景和方法

    gomock是Go編程語(yǔ)言的模擬框架, 它與Go的內(nèi)置測(cè)試包很好地集成在一起,但也可以在其他上下文中使用,本文主要介紹了gomock的使用場(chǎng)景和方法,感興趣的可以了解下
    2024-10-10
  • Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解

    Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解

    Casbin是一個(gè)強(qiáng)大的、高效的開源訪問(wèn)控制框架,其權(quán)限管理機(jī)制支持多種訪問(wèn)控制模型,Casbin只負(fù)責(zé)訪問(wèn)控制。本文將利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證功能,需要的可以參考一下
    2023-02-02
  • 解決golang gin框架跨域及注解的問(wèn)題

    解決golang gin框架跨域及注解的問(wèn)題

    這篇文章主要介紹了解決golang gin框架跨域及注解的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Linux系統(tǒng)下Go語(yǔ)言開發(fā)環(huán)境搭建

    Linux系統(tǒng)下Go語(yǔ)言開發(fā)環(huán)境搭建

    這篇文章主要介紹了Linux系統(tǒng)下Go開發(fā)環(huán)境搭建,需要的朋友可以參考下
    2022-04-04
  • Golang?Compare?And?Swap算法詳細(xì)介紹

    Golang?Compare?And?Swap算法詳細(xì)介紹

    CAS算法是一種有名的無(wú)鎖算法。無(wú)鎖編程,即不使用鎖的情況下實(shí)現(xiàn)多線程之間的變量同步,也就是在沒(méi)有線程被阻塞的情況下實(shí)現(xiàn)變量的同步,所以也叫非阻塞同步Non-blocking?Synchronization
    2022-10-10
  • golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    Go 語(yǔ)言是一門適合用于編寫高效且并發(fā)的 Web 應(yīng)用程序的編程語(yǔ)言,同時(shí)也可以使用它進(jìn)行數(shù)據(jù)處理和分析,本文主要介紹了如何通過(guò)go語(yǔ)言實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù),感興趣的小伙伴可以了解下
    2025-04-04

最新評(píng)論