Golang Go语言中想知道的 orm 框架如何映射结构体到表?

发布于 1周前 作者 phonegap100 来自 Go语言

Golang Go语言中想知道的 orm 框架如何映射结构体到表?

通过结构体名去映射每个表的话,难道是有一个"注册"结构体的操作?不然的话是怎么找到项目中与表名对应的结构体的?

package model

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

type ExaFileUploadAndDownload struct {
	gorm.Model
	Name string `json:"name" gorm:"comment:'文件名'"`
	Url  string `json:"url" gorm:"comment:'文件地址'"`
	Tag  string `json:"tag" gorm:"comment:'文件标签'"`
	Key  string `json:"key" gorm:"comment:'编号'"`
}

}

更多关于Golang Go语言中想知道的 orm 框架如何映射结构体到表?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

gorm:“comment:‘文件名’” 就是这个起作用, 用反射获取 tag 的内容。然后一一对应

更多关于Golang Go语言中想知道的 orm 框架如何映射结构体到表?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


可以给结构体写个 TableName()方法返回对应的表名,如果未定义该方法,框架可以使用默认映射策略,如:ExaFileUploadAndDownload -> exa_file_upload_and_download

很多玩法,可以注册用反射解决,可以生成代码解决,也可以直接不解决,让用户 new 出来当参数传进来

多了解 go 反射

func (ExaFileUploadAndDownload) TableName() string {
return “表名”
}

我看代码里面写的是反射方式

在Go语言中,ORM(对象关系映射)框架通过将结构体映射到数据库表,简化了数据库操作。以下是一些常见的Go ORM框架(如GORM、XORM等)如何映射结构体到表的概述:

  1. 结构体标签:ORM框架通常使用结构体标签(struct tags)来定义映射关系。例如,在GORM中,你可以通过gorm:"column:db_column_name"标签来指定结构体字段对应数据库表的列名。

    type User struct {
        ID       uint   `gorm:"primaryKey"`
        Name     string `gorm:"column:username"`
        Email    string `gorm:"uniqueIndex"`
        Age      int
    }
    
  2. 约定优于配置:许多ORM框架遵循约定优于配置的原则。例如,GORM默认会将结构体名称的蛇形转换作为表名,并将结构体字段名作为列名。

  3. 全局配置:你可以在初始化ORM时设置一些全局配置,如数据库连接信息、表前缀等。这些配置会影响所有映射到数据库的结构体。

  4. 迁移:ORM框架通常提供迁移功能,可以自动或手动地根据结构体的定义创建或更新数据库表结构。

  5. 高级映射:对于复杂的映射关系,如一对一、一对多、多对多等,ORM框架通常提供额外的配置和接口来实现这些关系。

总之,Go语言的ORM框架通过结构体标签、约定优于配置、全局配置、迁移和高级映射等机制,将结构体映射到数据库表,从而简化了数据库操作。

回到顶部