GORM 框架研究

GORM 框架研究

💡 原文中文,约14900字,阅读约需36分钟。
📝

内容提要

本文介绍了GORM框架和ORM的概念,ORM是一种在关系数据库和面向对象编程语言之间转换数据的编程技术,GORM是针对Go语言的ORM库,提供了丰富的功能和灵活的插件机制。文章还比较了裸写SQL和使用ORM的优缺点。

🔎

延伸解读

GORM 的映射机制与源码实现

GORM 通过 NamingStrategy 将 Go 结构体名称和字段名转换为数据库表名和列名,并在 Open 时初始化回调和 Dialector。执行 Create 时,stmt.Parse 解析模型并生成 SQL,再由 Dialector.Explain 执行。这种设计实现了从结构体到数据库的映射解析及 SQL 执行,其他操作如 Update、Delete 也遵循类似流程。

扩展 GORM 的两种方式:回调与插件

GORM 提供了注册回调和开发插件两种自定义能力,以应对复杂 SQL 等特殊场景。回调可注册到特定操作(如 Create)上,在操作前后执行自定义逻辑;插件则通过 db.Use 注册,可访问 Schema 信息进行字段处理。例如 Prometheus 插件可用于监控。这体现了 GORM 灵活的插件机制。

裸写 SQL 与使用 GORM 的权衡

使用 GORM 能提高开发效率,使数据访问更对象化、抽象,支持面向对象封装,并便于引入缓存等附加功能。但自动化映射会消耗性能,降低执行效率;思维固定化可能限制 SQL 优化技巧的运用;多层系统也可能降低效率。此外,ORM 生成的代码可能不够高效,且易被误用,如将全部数据提取到内存再过滤。

❓

Q&A

什么是ORM?它的核心原则有哪些?

ORM(对象关系映射)是一种在关系数据库和面向对象编程语言内存之间转换数据的编程技术。它的核心原则包括:简单、精确、易懂、易用。

GORM是什么?它有哪些主要功能?

GORM是专门针对Go语言的ORM库,旨在对开发者友好。它提供全功能ORM,支持关联(一对一、一对多、多对一、多对多、多态、单表继承)、钩子(Before/After Create/Save/Update/Delete/Find)、预加载、事务、批量插入、SQL构建器、自动迁移、日志、可扩展插件API等功能。

GORM的工作原理是什么?

GORM的原理是在数据库和编程语言对象之间抽象出一个ORM层,将对象的字段与关系型数据库的表进行映射,然后由ORM完成数据持久化。具体来说,GORM通过解析结构体生成对应的SQL语句并执行,实现从结构体到数据库的映射解析及SQL执行。

使用GORM相比裸写SQL有哪些优缺点?

优点:开发效率更高,使开发更加对象化,数据访问更抽象、轻便,支持面向对象封装,可移植,可以方便地引入数据缓存等附加功能。缺点:自动化映射消耗系统性能,降低执行效率;思维固定化,一些SQL优化技巧无法运用;多层系统导致效率降低;可能误用,如将全部数据提取到内存再过滤。

GORM如何实现自定义扩展?

GORM通过注册Callback和开发Plugin来实现自定义扩展。例如,可以注册回调函数在Create操作前后执行自定义逻辑,或者通过db.Use()注册插件来扩展功能,如Prometheus插件。

GORM在Go语言ORM框架中的流行度如何?

根据GitHub上的数据,GORM是Go语言中最受欢迎的ORM框架之一,拥有超过34,000个Star,远超其他框架如beego、sqlx、ent等。

🏷️

标签

➡️

继续阅读