首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言ORM-gorm学习笔记(二)

Go语言ORM-gorm学习笔记(二)

作者头像
frank.
发布于 2020-07-23 15:24:02
发布于 2020-07-23 15:24:02
4.8K00
代码可运行
举报
运行总次数:0
代码可运行

惯例约定

gorm.model

gorm.model是一个包含了ID,CreatedAtUpdatedAtDeletedAt四个字段的Golang结构体。你可以将它嵌入到你自己的模型中,当然你也可以完全使用自己的模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// gorm.Model 定义
type Model struct {
ID unit `gorm:"primary_key"` // 字段名为 ID 的字段默认作为表的主键
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
ID作为主键

GORM默认会使用名为ID的字段作为表的主键。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type User struct {
ID string // 名为ID的字段会默认作为表的主键
Name string
}

// 使用AnimalID作为主键
type Animal struct {
AnimalID int64 `gorm:"primary_key"`
Name string
Age int64
}
表名

表名默认就是结构体名称的复数,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type User struct {} // 默认表名是users

// 将User的表名设置为profiles
func (User) TableName () string {
if u.Role == "admin" {
        return "admin_users"
} else {
        return "users"
}
}

// 禁用默认表名的复数形式,如果设置true,则User的默认表名是user
db.SingularTable(true)
指定表名称
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用User结构体创建名为deleted_users的表
db.Table("deleted_users").CreateTable(&User{})

var deleted_users []User
db.Table("deleted_users").Find(&deleted_users)
// SELECT * FROM deleted_users;

db.Table("deleted_users").WHERE("name=?", "jinzhu").Delete()
// DELETE FROM deleted_users WHERE name='jinzhu';
更改默认表名(table name)

你可以通过定义DefaultTableNameHandler来设置默认表名的命名规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string {
return "prefix_" + defaultTableName;
}

迁移(数据表操作)

自动迁移

自动迁移你的模型,使之保持最新状态。

警告:自动迁移只会创建表、缺失的列、缺失的索引,不会更改现有列的类型或删除未使用的列,以此来保护您的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.AutoMigrate(&User{})
db.AutoMigrate(&User{}, &Product{}, &Order{}) // 可同时创建多张表

// 创建表时添加表后缀
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})

模型方法

Has Table
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 检查模型User的表是否存在
db.HasTable(&User{})

// 检查表users是否存在
db.HasTable("users")
Create Table
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 为模型User创建表
db.CreateTable(&User{})

// 创建表时会追加ENGINE=InnoDB到SQL语句中
db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})
Drop Table
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 删除模型User的表
db.DropTable(&User{})

// 删除表users
db.DropTable("users")

// 删除模型User的表和表products
db.DropTableIfExists(&User{}, "products") // 删除多张表,如果表存在则删除
ModifyColumn

修改列类型为给定的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 修改模型User的description列的类型为text
db.Model(&User{}).ModifyColumn("description", "text")
DropColumn
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 删除模型User的description列
db.Model(&User{}).DropColumn("description")
Add Indexes

添加索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 为name列添加名为idx_user_name的普通索引
db.Model(&User{}).AddIndex("idx_user_name", "name")

// 为name和age两列添加名为idx_user_name_age的复合索引
db.Model(&User{}).AddIndex("idx_user_name_age", "name", "age")

// 添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name", "name")

// 为多列添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age")
Remove Index
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 删除索引
db.Model(&User{}).RemoveIndex("idx_user_name")

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gorm
自动迁移仅仅会创建表,缺少列和索引,并且不会改变现有列的类型或删除未使用的列以保护数据。
TomatoCool
2023/10/16
5290
GORM V2 自动迁移和迁移接口的方法
在项目开发中,我们可能会随时调整声明的模型,比如添加字段和索引,使用 GORM 的自动迁移功能,可以始终让我们的数据库表保持最新。此外,GORM 还提供了一些迁移接口的方法,可以帮助我们方便操作数据库表、字段和索引。
frank.
2020/09/10
4.4K0
介绍一个超好用的orm库gorm【Golang 入门系列十二】
之前在已经介绍了用的github.com/go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。
章为忠学架构
2019/08/27
3.2K0
Gorm 使用
使用 ORM 工具,通常需要在代码中定义模型(Models)与数据库中的数据表进行映射, 在 GORM 中模型(Models)通常是正常的结构体、基本的 go 类型或他们的指针,同时也支持 sql.Scanner 与 driver.Valuer 接口(interfaces)
王小明_HIT
2021/03/27
1.8K0
Go 使用 Gorm 操作 MySQL 数据库
在实际开发中,要用到数据库存储数据。MySQL是一个关系型数据库管理系统 使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。
张云飞Vir
2020/04/01
6.3K0
GORM CRUD 10 分钟快速上手
ORM(Object Relational Mapping),中文名为对象关系映射。
恋喵大鲤鱼
2023/10/12
8610
一文带你了解 GORM Model
GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体。
程序员海军
2023/11/29
9330
一文带你了解 GORM Model
Gorm实战,轻松掌握数据库增删改查技巧!
CRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建、查询、更新和删除操作。
贾维斯Echo
2024/01/12
3.7K0
Go开源ORM——GORM
可以通过定义嵌套gorm.Model这个结构体的类型来定义实体类,gorm.Model中定义了数据库表的一些常用基本字段
歪歪梯
2020/10/26
2.3K0
day5 | 设计模式之 Database/SQL 与 GORM 实践 | 第三届字节跳动青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。同时这也是课表的第5天课程
千羽
2022/05/31
1.6K0
day5 | 设计模式之 Database/SQL 与 GORM 实践 | 第三届字节跳动青训营笔记
基于Gin + GORM + Vue的前后端分离项目实践
昨天我们介绍了前后端结合将数据持久化的基础流程,将后端的数据库的表信息渲染到前端页面上,将前端提交的表信息发送到后端处理,对数据库的表信息进行增删改查,因为昨天还没有搭建数据库,就没具体演示,今天使用docker搭建一个mysql数据库,然后使用后端gorm框架操作mysql数据库。
希里安
2023/10/30
6400
基于Gin + GORM + Vue的前后端分离项目实践
Go之Gorm和BeegoORM简介及配置使用
简介 ORM Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作 Gorm gorm就是基于Go语言实现的ORM库。 类似于Java生态里大家听到过的Mybatis、Hibernate、SpringData等。 下载使用Gorm库 下载gorm库 go get -u github.com/jinzhu/gorm // 这是比较原始的方式,现在有了go mod,我
iginkgo18
2020/09/27
1.8K0
Go ORM 干啥的?
什么是ORM ,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,
阿兵云原生
2023/02/16
3K0
一文入门gorm和xorm的基本操作(CRUD)
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
用户6297767
2023/11/21
7160
Go语言gorm框架MySQL实践
gorm是一个使用Go语言编写的ORM框架。文档齐全,对开发者友好,支持主流数据库。
FunTester
2022/02/08
2K0
Gorm-使用结构体定义数据库模型
Gorm是一个基于Golang语言的ORM库,它提供了一种简单易用的方式,帮助开发人员更轻松地管理数据库。
堕落飞鸟
2023/04/24
1K0
Go gorm
在后端开发上,通常都要与资料库做操作(新增、修改、删除、查找),后端会撰写 SQL 语句,并且透过一些工具或套件(例如:pymysql)向 SQL 资料库来做沟通。而撰写原生 SQL 的缺点为:
f1sh
2024/07/29
3260
Gorm框架学习---CRUD接口之查询
GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误
大忽悠爱学习
2022/09/27
1.1K0
Go语言ORM-gorm学习笔记(一)
模型(Models)通常只是正常的golang structs、基本的go类型或它们的指针。同时也支持sql.Scanner及driver.Valuer接口(interfaces)。
frank.
2020/07/24
1.6K0
gorm入门之概述
什么是orm?简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。用orm框架可以快速的进行数据库操作。
大话swift
2020/03/26
1.6K0
gorm入门之概述
相关推荐
Gorm
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档