GORM
文章平均质量分 67
gorm
cheems~
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
GORM汇总
GORM汇总前言目录前言对于新上手gorm框架来说,直接看官方文档比较难理解,不如看看视频,有什么坑值得注意入门了之后有些东西还是看官方文档比较好,官方文档: GORM 指南该专栏记录2个b站gorm视频的笔记目录1.视频链接【GORM简明教程】关于GORM你看这一个就够了介绍:视频含金量并不高,就是基础的api介绍了一下GORM概述GORM模型与约定GORM—增GORM—查GORM—改GORM—删2.视频链接【GORM教学】手把手带你入门GORM(手把手系列复活了)//原创 2022-05-12 23:23:11 · 364 阅读 · 0 评论 -
Go语言技巧 - GORM实战剖析基本用法和原理解析 - 转载
Go语言技巧 - GORM实战剖析基本用法和原理解析 - 转载前言GORM库的官方文档Talk is Cheap. Show me the code.创建查询更新删除原生SQL使用GORM的核心思路梳理一个对象 = 一行数据选择生效字段 = 核心结构体 + 字段数组缩短链式调用聚焦微服务的场景避免引入非原生MySQL的特性从查询接口了解GORM的核心实现两个核心文件1. Find的主要代码2. tx.callbacks.Query()的实现3. Execute的执行逻辑4. Callback的注册5. Qu转载 2022-05-16 15:32:48 · 2693 阅读 · 0 评论 -
gorm 自定义数据的使用
gorm 自定义数据的使用前言结构体转json存数据库数组存数据库前言如果想把json存进数据库,array存入数据库,拿出来后也不想进行处理了,直接解析到结构体上直接用,数组,切片,json这些是非常规数据类型。这个时候我们就可以通过自定义来实现官方文档:自定义数据类型自定义的数据类型必须实现 Scanner 和 Valuer 接口,以便让 GORM 知道如何将该类型接收、保存到数据库结构体转json存数据库type Info struct { Name string Age int原创 2022-05-16 14:31:49 · 1122 阅读 · 0 评论 -
gorm 事务的使用
gorm事务的使用普通事务嵌套事务手动事务一个特殊的示例SavePoint、RollbackTogorm事务默认是开启的。为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。一般不推荐禁用// 全局禁用db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ SkipDefaultTransaction: true,})原创 2022-05-16 14:00:00 · 9351 阅读 · 5 评论 -
gorm 多态以及关联标签
gorm 多态以及关联标签多态关联标签外键和引用多对多多态多态只支持一对一和一对多!多态只存在has one和has many的关系里面,多态的结构体数据不可用同时被多人拥有polymorphic 指定多态类型,比如模型名polymorphicValue 指定多态值、默认表名夹子拥有小风车,御姐也有小风车,如果又来一个别人,总不能在小风车里面增加多个字段吧,所有这里用到多态,用polymorphic:Owner指定多态,则小风车只需要2个字段即可实现多态(OwnerType,OwnerID)原创 2022-05-16 11:29:22 · 1415 阅读 · 2 评论 -
gorm 多对多关系 以及 关联的操作
gorm 多对多关系 以及 关联的操作前言多对多关系模型创建关联的操作不用预加载使用预加载查找关联添加关联删除关联替换关联清空关联前言关联的操作最重要的是many2many关系的维护多对多关系模型创建Many to Many 会在两个 model 中添加一张连接表。type GirlGOD struct { gorm.Model Name string Dogs []Dog `gorm:"many2many:dog_girl_tables"`}type Dog struct { g原创 2022-05-16 00:06:25 · 4561 阅读 · 4 评论 -
gorm 一对多关系 以及预加载的用法
gorm 一对多关系 以及预加载的用法一对多关系的介绍预加载Preload预加载不使用预加载使用预加载使用链式预加载条件预加载Joins 预加载一对多关系的介绍这里女神表里面有多个舔狗,就是一对多has many关系并且舔狗表里面包含Info信息表,是has one关系type GirlGOD struct { gorm.Model Name string Dog []Dog}type Dog struct { gorm.Model Name string GirlGo原创 2022-05-15 23:12:05 · 1218 阅读 · 0 评论 -
gorm 一对一关系 以及 关联的操作
gorm 一对一关系 以及操作其关联Belongs ToHas One预加载关系操作确定关联模型查找关联添加关联替换关联删除/清空 关联Belongs To理解:A属于B------>A依赖B,A要有外键映射到Bbelongs to 会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。(员工 属于 公司)例如,您的应用包含 user 和 company,并且每个 user 能且只能被分配给一个 company。下面的类型就表示这种关系。 注意,在 User原创 2022-05-15 21:45:21 · 1622 阅读 · 0 评论 -
gorm普通的增删改查
gorm普通的增删改查创建查询更新删除原生SQL创建创建单独创建----db.Create(&模型)指定字段----在Create之前使用Select跳过字段----在Create之前使用Omit批量创建----db.Create(&[]模型)type User struct { gorm.Model Name string Age uint8 `gorm:"comment:年龄"`}func main() { db, _ := gorm.Open(mysq原创 2022-05-15 18:37:30 · 1459 阅读 · 0 评论 -
gorm模型创建以及关键标签
gorm 模型创建以及关键标签模型什么是模型模型的约定嵌入结构体关键标签关联标签模型模型定义什么是模型模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成人话:一个结构体,携带gorm规定的标签,或者实现了gorm的接口作用:用模型就可以进行相关数据库的操作,比如说建表,对某个表的增删改查,一对一,一对多关系的联查等,是gorm进行各种操作的基础,一个书写良好的模型会让你对数据库的操作事半功倍模型的约定约定:GOR原创 2022-05-15 17:12:29 · 1581 阅读 · 0 评论 -
gorm连接mysql数据库以及建表和自动迁移
gorm连接mysql数据库以及建表和自动迁移前言连接连接数据库配置mysql配置gorm常规数据库接口-连接池迁移自动迁移建表手动迁移建表Migrator接口常用的Migrator方法创建表是否存在表删除表重命名表更多的api前言本书皆是对官方文档常用的内容进行描述包括:连接数据库,建表,自动迁移,Migrator接口连接连接数据库连接到数据库最简单的连接方式import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm")func ma原创 2022-05-15 16:22:54 · 4901 阅读 · 0 评论 -
GORM—删
GORM—删删除记录批量删除软删除物理删除如果有DeletedAt *time.Time sql:"index",其实是软删除删除记录删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。 // 删除现有记录 db.Delete(&email) // DELETE from emails where id=10; // 为删除 SQL 添加额外的 SQL 操作 db.Set("gorm:delete_option原创 2022-05-12 23:04:38 · 638 阅读 · 0 评论 -
GORM—改
GORM—改更新所有字段指定字段更新更新选定字段无Hooks更新批量更新使用SQL表达式更新更新所有字段如果主键是零值,更新所有记录 var user User user.Age = 33 db.Debug().Save(&user)[2022-05-12 21:21:09] [2.00ms] INSERT INTO `users` (`age`) VALUES (33) [1 rows affected or returned ] 如果主键不是零值,则更新该条记录 va原创 2022-05-12 21:32:09 · 699 阅读 · 0 评论 -
GORM—查
GORM—查简单查询Where条件NotOr内联查询额外查询选项子查询Select选择字段Order排序Limit数量OffsetCountGroup & HavingJoins连接PluckScan扫描简单查询查询单条 var user User // 根据主键查询第一条记录SELECT * FROM users ORDER BY id LIMIT 1; db.First(&user) // 随机获取一条记录SELECT * FROM users LIMIT 1; db.原创 2022-05-12 20:51:44 · 2196 阅读 · 0 评论 -
GORM—增
GORM增创建设置默认值想要插入零值指针实现Scanner/Valuer的接口创建 小知识:在GORM语句前面增加.DeBug(),即可看到执行的Sql语句 db.NewRecord(user)返回主键是否为空 这里发现插入时并没有插入主键,但是这里主键是自增的,需要注意的是,传入的user实例的id被赋值了type User struct { ID int64 Name string Age int64}func main() { db, err := gorm.Ope原创 2022-05-12 18:02:27 · 2434 阅读 · 0 评论 -
GORM模型与约定
GORM模型与约定模型模型的概念模型的定义约定主键的约定表名的约定列名的约定gorm.Model的约定模型模型的概念 在使用GORM时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体(模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成)。总之意思就是前面一篇概述中用的结构体,在GORM中就称之为模型,模型是与数据表进行映射的结构体。 例如原创 2022-05-12 17:21:13 · 412 阅读 · 0 评论 -
GORM概述
GORM概述前言概述快速入门前言官网文档另人看的头疼,还是记录一些常用用法吧。GORM给我最直观的感受:程序员只需关系结构体,操作结构体,无需关注如何操作数据库。概述数据表 <===> 结构体数据行 <===> 结构体实例字段 <===> 结构体字段快速入门db.AutoMigrate(&UserInfo{}):意思是自动迁移,自动迁移为给定模型运行自动迁移,只会添加缺少的字段,不会删除/更改当前数据。就是说如果结构体加了新的字段,会给表原创 2022-05-12 16:00:54 · 957 阅读 · 2 评论