IT袋

当前位置:主页 > 经验教程 > 建站编程 >

gorm中的核心数据结构

gorm中的核心数据结构

时间:2023-11-02 21:47:38 来源:IT袋 作者:马勇
导读:gorm中的核心数据结构,一个电脑小知识,为大家介绍gorm中的核心数据结构方面的介绍,下面IT袋网为您详细介绍 今天咱们一起来学习下gorm中的几个核心数据结构。 通过了解gorm底层的数据结构

gorm中的核心数据结构

一个电脑小知识,为大家介绍gorm中的核心数据结构方面的介绍,下面IT袋网为您详细介绍

今天咱们一起来学习下gorm中的几个核心数据结构。

通过了解gorm底层的数据结构,能够让我们了解gorm底层的实现,以便更好的使用gorm。

在gorm中主要有5个核心结构:DB、Config、Statment、Clause和Schema。

接下来我们就详细的看下每种数据结构以及各结构之间的关系。

gorm中的核心数据结构

一、DB

在使用gorm的时候,我们首先会使用gorm.Open方法和数据库建立连接,同时并返回一个gorm.DB结构。如下:

var db *gorm.DB
dsn := "username:password@tcp(127.0.0.1:3306)/test01?charset=utf8mb4&parseTime=True&loc=Local&timeout=1000ms"
config := &gorm.Config{
 NamingStrategy: schema.NamingStrategy{
     SingularTable: true, // 禁用表名复数
 },
}
db, _ := gorm.Open(mysql.Open(dsn), config)

如上,db变量就是*gorm.DB类型的,如下:

// DB GORM DB definition
type DB struct {
 *Config
 Error        error
 RowsAffected int64
 Statement    *Statement
 clone        int
}

大家看,DB结构里包含了嵌入的结构*Config,还有一个Statement结构。

二、Config结构

Config结构是包含在DB结构内的。顾名思义,Config就是和数据库相关的一些配置。

在gorm.Open函数中传入的,如上面我们对数据表命名的配置中禁用了表名的复数形式。如下:

config := &gorm.Config{
 NamingStrategy: schema.NamingStrategy{
     SingularTable: true, // 禁用表名复数
 },
}

这个的作用就是我们在建立和表对应的Model结构体时,结构体的名称会转换成对应的表名,但使用的是单数形式。

例如,我们有一个MTest的Model结构体。

那么,默认情况下,gorm会把该model转换成对应的m_tests表名。

而如果做了对应的配置:SingularTable:True,gorm就会把该model转换成对应的m_test表名。

以下就是Config结构中的核心字段(我们省略了一些):

// Config GORM config
type Config struct {
 // NamingStrategy tables, columns naming strategy
 NamingStrategy schema.Namer
 // DryRun generate sql without execute
 DryRun bool
 // ConnPool db conn pool
 ConnPool ConnPool
 // Dialector database dialector
 Dialector
 // Plugins registered plugins
 Plugins map[string]Plugin
 callbacks  *callbacks
}

在该结构中,各字段如下:

  • ConnPool:是和数据库建立的真实连接。
  • Dialector:是连接器。这个是一个接口,以适配各种类型的数据库。比如MySQL、ClickHouse等。比如,在最开始传入Open函数的第一个参数mysql.Open(dsn)就是一个Dialector,说明要连接的是mysql数据库。后续所有操作都是针对mysql数据库的。

相关阅读

  • Java基础之编程语言和Java简介

    Java基础之编程语言和Java简介

    小编为网友们解答Java基础之编程语言和Java简介的相关话题,接下来IT袋网小编就来介绍。 编程语言是计算机能够理解和识别用户操作意图的一种高级语言。 它包括一系列符号、关键字和语法

  • 帝国cms万能标签 帝国cms灵动标签调用指定栏目或分类下的文章

    帝国cms万能标签 帝国cms灵动标签调用指定栏目或分类下的文章

    帝国cms怎么调用指定栏目或分类下的文章? 下面itmemoIT袋小编就给大家分享帝国cms灵动标签调用指定栏目标题,简介...等信息的代码! [e:loop={10,6,0,0}] li a href=?=$bqsr[titleurl]? class=news-zuixin-picim

  • 电脑浏览国外网站用什么加速器 不收费的外网加速器介绍

    电脑浏览国外网站用什么加速器 不收费的外网加速器介绍

    关于这方面的知识你知道吗?电脑浏览国外网站用什么加速器和不收费的外网加速器介绍方面的内容,下面IT袋为您详细介绍 说在前面 GitHub作为国外网站,有时候经常访问不上去,那么,Git

  • 2023年的顶尖IDPS解决方案

    2023年的顶尖IDPS解决方案

    本文为您带来的是2023年的顶尖IDPS解决方案的相关介绍,接下来就是全面介绍。 以下是一些2023年的顶尖IDPS解决方案,它们代表了各种类型的IDPS技术。 1. Cisco Secure Next-Generation IPS Cisco Secure NG