当前位置: 首页 > news >正文

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_":嵌套字段前缀。

代码示例

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

package mainimport ("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 为嵌入字段添加前缀。

http://www.mrgr.cn/news/531.html

相关文章:

  • 线程的概念
  • 《学会 SpringBoot 系列 · spring.factories 详解》
  • WEB漏洞-SQL注入之简要SQL注入
  • HTTPS 详解
  • 看图学sql之sql 中的窗口函数
  • 融合创新:EasyCVR视频汇聚平台云计算技术与AI技术共筑雪亮工程智能防线
  • RabbitMQ发布订阅模式Publish/Subscribe详解
  • 了解Android
  • 客户端登录逻辑
  • WLAN射频调优
  • 物流快递外卖管理平台系统-计算机毕设Java|springboot实战项目
  • OpenHarmony网络协议通信—libevent [GN编译] - 事件通知库
  • 洁净区环境监测法规依据、评估方法与原则风险评估策略解析
  • spring bean的循环依赖
  • Android10.0 人脸解锁流程分析
  • 使用flask遇到的问题及解决方法
  • WebDeveloper:1靶机
  • 红黑树的模拟实现
  • Java面试八股之什么是MQTT协议
  • Leetcode3228. 将 1 移动到末尾的最大操作次数