GORM(Go Object-Relational Mapping)是一个用于Go语言的ORM库,它提供了一种简单、优雅的方式来操作数据库。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite和SQL Server。以下是GORM的一些主要特性:
本文介绍了三个 Go 主流开发框架 GORM,Kitex,Hertz 的基本使用方法,覆盖了 ORM,RPC,HTTP 三个领域。帮助读者快速入门 Go 工程开发。
类似于 Java 生态里大家听到过的 Mybatis、Hibernate、SpringData 等。
GORM 默认的数据更新、创建都在事务中,如无必要,可以关闭默认的事务,获得更大的性能提升, 事务的全局性或者临时关闭,即使在关闭默认事务,仍然可以通过方法 Begin, Transactions 方法开启事务。
除了基本的查询操作,GORM 还支持关联查询。关联查询是指查询多个表中的数据,并将它们组合在一起。下面是一些常用的关联查询方法:
之前在已经介绍了用的github.com/go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。
所有的后端应用都离不开数据库的操作,在Go中也有一些好用的数据库操作组件,例如Gorm就是一个很不错的选择。
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。同时这也是课表的第5天课程
1.何恺明github主页宣布将于 2024 年加入麻省理工学院(MIT)电气工程与计算机科学系(EECS),成为一名教师。何许人也?
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
GORM是一个比较流行且功能齐全的orm库,主要有以下特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Context,预编译模式,DryRun 模式 批量插入,FindInBatches,Find/Create with Ma
当我们使用golang来构建一个web应用或者其他使用到数据库的应用的时候,通常会选择使用gorm库。主要原因还是因为gorm库操作方便,简单易用。
本文介绍了笔者在重构一个 Go 项目的实践经验,老项目由于迭代速度快,导致了接口杂乱,结构扁平,代码耦合度高等问题,在项目复杂度增加的情况下不再适合扩展,因此对整个项目进行了重构。篇幅有限,本文主要介绍 ORM 层的重构。
Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。
在进行并发操作时,我们可能会遇到资源竞争的情况,例如多个goroutine同时修改同一个数据库记录。这时,我们需要使用锁来保证数据的一致性。在Gorm中,可以使用事务锁定来实现这一目的。
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
ORM(Object Relational Mapping),中文名为对象关系映射。
GORM, XORM, ent 和 sqlx 都是 Go 语言的库,用于操作数据库:
当前golang开发人员,在编写完成代码后,通常会写对应的单测来保证代码的健壮。对于很多大厂来说,编写单测已经是代码规范的一部分。基于官方提供的gomock框架和mockgen辅助工具就可以满足绝大部分场景,对于不能直接创建的依赖进行mock。但是,当我们编写API接口的时候,往往会对数据库进行操作,那么就需要支持对SQL进行mock的场景。
下面我们以gorm为例讲解一下,为什么,同时让大家熟悉一下gorm的是如何开启事务的。
在使用事务锁定时,需要注意避免死锁的发生。死锁是指两个或多个goroutine在等待对方释放锁定资源的情况下,陷入了一种互相等待的状态。为了避免死锁的发生,我们应该在进行事务锁定时,按照一定的顺序对数据进行加锁。
安装GORM非常简单,使用go get -u就可以在GOPATH目录下安装最新GROM框架。
在正式进入主题前,先说说框架的现状,个人用的是gin-gonic框架,这是个在校大学生写的基于go语言的高性能web框架,在此之前我对比过beego 、 iris 、gin-gonic这几个在维护频度和依赖支持以及star热度方面,个人选择了gin-gonic这个框架 ,同时也在github上选用了一套比较前卫的成型的框架代码,东西十分的好,但是个人觉得框架集成的mysql实在是看不下去(主要是性能低了+ 稳定性不够好+升级麻烦),遂就将数据库换成postgresql,配置完成就开始测试Dao,需要说的是其中gorm是位台湾胸弟写的ORM框架,于是开始~
在 GORM 中使用外键涉及到在结构体定义中指定外键关系以及数据库迁移时的操作。下面是一个使用 GORM 定义外键的示例:
gorm是一个使用Go语言编写的ORM框架。文档齐全,对开发者友好,支持主流数据库。
Gorm还支持使用原生SQL语句执行事务操作。在Gorm中执行事务的方法是Transaction。例如,以下代码执行了一个简单的事务操作:
下面是一个使用Gorm进行事务处理的示例代码,该代码演示了如何使用显式事务和隐式事务处理方法。:
今天本来是想写gorm相关的知识点的,遇到了批量插入的问题,发现很不科学,才发现gorm已经出了新版本2.0版本,最新的Tag是v1.21.6,我目前使用的是v1.9.10。
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
gorm的DB提供了Transaction方法,相当于一个事务模板,自动commit或者rollback,它提供了func(tx *gorm.DB) error参数用于自定义事务内的数据库操作。
EasyDSS视频平台除了提供网页直播外,还可上传视频进行点播,上传视频后一键生成视频地址,以供用户分享、嵌入到网站、产品软件系统中。
Gorm是一个支持多种数据库的ORM框架,因此它在数据库连接池管理方面也提供了一些功能。在Gorm中,连接池是自动管理的,它根据应用程序的需求动态地增加或减少连接数,从而提高数据库访问的效率。
ORM(Object-Relational Mapping)是一种编程技术,它将对象和关系数据库之间的映射抽象出来,使得开发者可以通过面向对象的方式操作数据库,而不用直接处理SQL语句,相当于在业务逻辑层和数据库层之间一座桥梁。在Golang中,有一款优秀的ORM框架叫做Gorm,它提供了强大的功能,使得数据库操作变得更加简单和灵活。
什么是orm?简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。用orm框架可以快速的进行数据库操作。
sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作,并且可以验证 SQL 语句的执行情况,非常适合用于单元测试中。
本文针对的是gorm V2版本。hook官方文档可以点击这里,本文旨在对官方文档作一些补充说明。
gorm.io/gorm@v1.20.11/callbacks/transaction.go
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
seata-golang 是一个分布式事务框架,实现了 AT 模式和 TCC 模式,AT 模式相较 TCC 模式对代码的入侵性更小、需要开发的接口更少;但 AT 模式对事务操作的数据持有全局锁,从这点来说,TCC 模式性能更好。
我们继续上一篇golang源码分析:dtm分布式事务(3)分析api服务的源码,位置位于dtmsvr/svr.go:
因为这里我们是测试学习使用,单独安装MySQL 比较费时费力,所以这里使用Docker方便快速掌握Gorm 相关知识。
两种写法都没啥问题,第一种写法, 如果只插入一条数据,可以使用第一种写法简单;第二种写法可以拿到执行的 *DB ,方便后续的 DB 操作
我们在项目中通过使用 gorm 来连接数据库,进行CURD操作。 gorm 文档地址 :gorm.io/zh_CN/docs/
首先,我们需要肯定的是,它的出现是为了弥补php更准确的是laravel的短板:性能和资源利用率。其次,就我们现有的场景来说,更多的是开发http的相关功能。
Gorm是一款基于Go语言的ORM库,提供了方便的事务处理功能,可以帮助开发者在数据库操作中实现事务的ACID特性。
炒冷饭,在自己的博客里记录一下我之前在 Stack Overflow 和 链滴社区 提过的一个问题。
领取专属 10元无门槛券
手把手带您无忧上云