📅  最后修改于: 2023-12-03 14:41:37.077000             🧑  作者: Mango
在使用 Gorm 进行表结构映射时,Gorm 会默认将表的列名与结构体中的字段名一一对应。但是,在实际应用中经常需要对某些列名进行更改,本文将介绍如何通过 Gorm 设置列名。
Column
标签Gorm 提供了 Column
标签,可以在结构体中设置列名。例如,我们有一个 User
结构体:
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Age uint8
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
这个结构体在 Gorm 中映射的表的列名将分别为 id
、name
、age
、email
、created_at
、updated_at
。如果需要将 Name
的列名改为 user_name
,只需要修改结构体如下:
type User struct {
ID uint `gorm:"primaryKey"`
UserName string `gorm:"column:user_name"` // 设置列名为 user_name
Age uint8
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
这样,在 Gorm 中映射的表的列名中,Name
的列名就变成了 user_name
。
ColumnName
方法除了在结构体中使用 Column
标签外,我们还可以在 Gorm 的定义表结构的过程中使用 ColumnName
方法来设置列名。例如,我们有一个 User
模型:
type User struct {
gorm.Model
Name string
Email string
}
我们可以通过下面这行代码来将 Name
的列名更改为 user_name
:
db.Model(&User{}).Column("user_name").UpdateColumn("Name", "小明")
这样,当我们查询 User
表时,对应的字段 Name
就会被映射到表的 user_name
列上。
Table
标签如果我们想将一个结构体映射到数据库中已有的表,却无法通过修改结构体中字段的方式来更改列名,这时可以使用 Gorm 提供的 Table
标签来达到目的。例如,我们有一个名为 goods_info
的商品信息表:
CREATE TABLE `goods_info` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品编号',
`goods_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '商品名称',
`goods_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '商品价格',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品信息表';
我们可以定义一个结构体与之映射:
type Goods struct {
ID uint `gorm:"primaryKey"`
GoodsName string `gorm:"column:goods_name"` // 设置列名为 goods_name
GoodsPrice float64 `gorm:"column:goods_price"` // 设置列名为 goods_price
CreatedAt time.Time `gorm:"column:created_at"` // 设置列名为 created_at
UpdatedAt time.Time `gorm:"column:updated_at"` // 设置列名为 updated_at
}
func (Goods) TableName() string {
return "goods_info" // 定义模型与表之间的映射关系
}
通过 TableName
方法,我们将 Goods
结构体与数据库中的 goods_info
表进行了映射。在结构体中使用了 Column
标签,则可以将结构体中的字段与表中的列一一对应起来。
通过使用 Column
标签、Table
标签、ColumnName
方法等技巧,我们可以以不同的方式设置 Gorm 映射结构体与数据库表结构之间的关系,达到更好的应用程序设计效果。