GORM 模型定义及代码示例

GORM 是一个流行的 Go 语言 ORM(对象关系映射)库,它允许开发者使用 Go 代码来操作数据库,而无需编写 SQL 语句。GORM 通过模型(Model)定义来映射数据库表的结构,使得数据库操作更加直观和方便。

模型定义基础

在 GORM 中,模型定义通常是一个结构体,每个字段都对应数据库中的一个列。GORM 通过结构体标签(Tag)来指定字段与数据库列的映射关系。以下是一些常用的 GORM 标签:

  • gorm:"type:varchar(12)":指定字段的类型为 varchar,长度为 12。
  • gorm:"size:2":指定字段的大小。
  • gorm:"column:y_addr":自定义列名。
  • gorm:"primaryKey":将列定义为主键。
  • gorm:"unique":将列定义为唯一键。
  • gorm:"default":定义列的默认值。
  • gorm:"not null":指定列不可为空。
  • gorm:"embedded":嵌套字段。
  • gorm:"embeddedPrefix:s_":嵌套字段前缀。

代码示例

根据提供的截图内容,我们可以发现一些字段标签的拼写错误和一些可能的改进点。下面是修改后的代码示例:

go 复制代码
package main

import (
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// StudentInfo 嵌套结构体,用于存储学生信息
type StudentInfo struct {
	Email *string `gorm:"size:32"` // 使用指针允许为空值
	Addr  string  `gorm:"column:y_addr;size:16"`
	Gender bool    `gorm:"default:true"`
}

// Student 学生模型结构体
type Student struct {
	ID    uint   `gorm:"primaryKey;size:10"`
	Name  string `gorm:"size:16"`
	Age   int    `gorm:"size:3"`
	Email *string `gorm:"size:128"` // 允许为空的电子邮件地址
	Info  StudentInfo `gorm:"embedded;embeddedPrefix:s_"` // 嵌套 StudentInfo
}

func main() {
	// 连接数据库,这里以 SQLite 为例
	dsn := "file:./test.db?cache=shared&mode=memory&_fk=1"
	db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// 使用 Debug 模式自动迁移 Student 表
	db.Debug().AutoMigrate(&Student{})
}

注意事项

  1. 指针的使用 :对于可能为空的字段,使用指针类型(如 *string)可以存储空值。
  2. 字段大小size 标签用于指定字段的大小,这有助于数据库层面的优化。
  3. 默认值 :使用 default 标签为字段指定默认值。
  4. 嵌套结构体 :使用 embedded 标签将一个结构体嵌入到另一个结构体中,同时使用 embeddedPrefix 为嵌入字段添加前缀。
相关推荐
·云扬·1 分钟前
基于YCSB的MongoDB性能压测实践指南
数据库·mongodb
卿雪2 分钟前
MySQL【索引】:索引的概念与分类
java·数据库·python·mysql·adb·golang
Zzzzzxl_4 分钟前
互联网大厂Java/Agent面试实战:Spring Boot、JVM、微服务、Kafka与AI Agent场景问答
java·jvm·spring boot·redis·ai·kafka·microservices
未若君雅裁11 分钟前
JVM实战总结笔记
java·jvm·笔记
pandarking1 小时前
[CTF]攻防世界:very_easy_sql(gopher)
数据库·sql·web安全·ctf
爬山算法8 小时前
Redis(162)如何使用Redis实现消息队列?
数据库·redis·缓存
u***32438 小时前
【Redis】centos7 systemctl 启动 Redis 失败
数据库·redis·缓存
煎蛋学姐9 小时前
SSM社区生鲜电商平台dq96z(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·ssm 框架·社区生鲜电商·商品信息管理
杨云龙UP9 小时前
从0搭建Oracle ODA NFS异地备份:从YUM源到RMAN定时任务的全流程
linux·运维·数据库·oracle
倔强的石头_9 小时前
从 Oracle 到 KingbaseES:破解迁移痛点,解锁信创时代数据库新可能
数据库