最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1. 方法一:通過 TableName 自定義表名

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

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

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

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 模型時,都會自動使用 prefix_tcm_operation_logs 作為表名。

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

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

2.1 使用 GORM 的 NamingStrategy 配置

在 GORM v2 中,可以通過設(shè)置全局的 NamingStrategy 來為所有表名添加前綴。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ù)庫
	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)
	}

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

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

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

另一種方法是通過自定義數(shù)據(jù)庫操作函數(shù)來動態(tài)添加前綴。這種方法不常見,但在一些特殊場景下可能會用到。

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ù)庫
	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é)

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

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

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

相關(guān)文章

  • golang實(shí)現(xiàn)java uuid的序列化方法

    golang實(shí)現(xiàn)java uuid的序列化方法

    這篇文章主要介紹了golang實(shí)現(xiàn)java uuid的序列化方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Golang?channel底層實(shí)現(xiàn)過程解析(深度好文)

    Golang?channel底層實(shí)現(xiàn)過程解析(深度好文)

    Go語言為了方便使用者,提供了簡單、安全的協(xié)程數(shù)據(jù)同步和通信機(jī)制,這篇文章主要介紹了Golang?channel底層是如何實(shí)現(xiàn)的,需要的朋友可以參考下
    2024-07-07
  • Go語言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼

    Go語言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼

    本文主要介紹了Go語言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Go語言之結(jié)構(gòu)體與方法

    Go語言之結(jié)構(gòu)體與方法

    這篇文章主要介紹了Go語言之結(jié)構(gòu)體與方法,結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。下面我們就一起來學(xué)習(xí)什么是Go語言之結(jié)構(gòu)體
    2021-10-10
  • Golang程序如何查找內(nèi)存泄漏(pprof)

    Golang程序如何查找內(nèi)存泄漏(pprof)

    該文章詳細(xì)介紹了如何使用Golang的pprof工具查找內(nèi)存泄漏,首先,在main包中引入pprof包并設(shè)置條件編譯,然后編譯程序并運(yùn)行,通過執(zhí)行g(shù)otoolpprof-inuse_space命令,可以進(jìn)入交互模式并使用top命令查看內(nèi)存分配最多的函數(shù),如果本機(jī)中有源代碼
    2024-12-12
  • 一文帶你了解Go語言中鎖的實(shí)現(xiàn)

    一文帶你了解Go語言中鎖的實(shí)現(xiàn)

    這篇文章主要帶大家一起學(xué)習(xí)一下go鎖和讀寫鎖的總結(jié)文檔,?主要從"參考"部分的文章結(jié)合源碼學(xué)習(xí),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • GoLang編程必備:GoFrame?GoLand插件介紹

    GoLang編程必備:GoFrame?GoLand插件介紹

    掌握GoLang編程必備工具,我們來深入了解GoFrame?GoLand插件,這個小巧但強(qiáng)大的插件將極大提升你的開發(fā)效率,讓代碼流暢如行云流水,一起跟隨本指南,解鎖更智能的編程之旅!
    2023-12-12
  • go語言goto語句跳轉(zhuǎn)到指定的標(biāo)簽實(shí)現(xiàn)方法

    go語言goto語句跳轉(zhuǎn)到指定的標(biāo)簽實(shí)現(xiàn)方法

    這篇文章主要介紹了go語言goto語句跳轉(zhuǎn)到指定的標(biāo)簽實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 深入理解Go語言中的數(shù)組和切片

    深入理解Go語言中的數(shù)組和切片

    Go語言中的數(shù)組大概相當(dāng)與C/C++中的數(shù)組,固定大小,不能夠動態(tài)擴(kuò)展大小,而切片大概相當(dāng)與C++中的Vector,可以動態(tài)擴(kuò)展大小,當(dāng)大小超過容量時,重新分配一塊內(nèi)存,然后將數(shù)據(jù)復(fù)制到新的內(nèi)存區(qū)域。下面我們通過幾個問題來更好理解golang 的數(shù)組和切片,一起來看看吧。
    2016-09-09
  • GO文件創(chuàng)建及讀寫操作示例詳解

    GO文件創(chuàng)建及讀寫操作示例詳解

    這篇文章主要為大家介紹了GO文件創(chuàng)建及讀寫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評論

宿迁市| 武汉市| 醴陵市| 资源县| 托克托县| 云南省| 库伦旗| 六安市| 子洲县| 九龙城区| 拉萨市| 辉南县| 锡林浩特市| 赤城县| 青河县| 甘谷县| 巴林左旗| 璧山县| 若羌县| 丰镇市| 聂拉木县| 龙岩市| 安溪县| 江门市| 体育| 榆社县| 建宁县| 施秉县| 通江县| 扎兰屯市| 会东县| 平和县| 盘山县| 岐山县| 莱阳市| 平山县| 郧西县| 新巴尔虎右旗| 赣州市| 尼玛县| 岳西县|