这是我参与「第三届青训营 -后端场」笔记创作活动的的5篇笔记
本节课是由gorm框架作者金柱,给大家讲解了gorm底层实现原理,对于新手来说比较不好理解,我们可以先了解其如何使用,再在此基础上深入理解其底层和设计原理。
一、database\sql
基本用法
- import导入连接数据库的驱动,此处使用的是mysql的驱动
第4行前面的 _ 表示导入这个依赖,但不使用,使用它的init函数初始化连接
2.连接上数据库服务器
3.查询数据保存到rows中
4.错误处理,并将rows中的数据扫描到[]user切片中
底层设计原理
简单来说,就说应用程序通过database\sql这个驱动接口,对我们的数据库服务器进行操作
database\sql接口定义了一套统一的实现接口,开发人员只需要按照统一的规则去实现这个接口,就可以操作到任何的数据库服务器,让开发人员能够更专注的进行业务处理
底层操作过程伪实现
底层连接接口
DB连接的几种类型和处理数据返回的几种方式
二、gorm篇
这部分课程分为了基础使用和设计原理两部分,身为go初学者建议还是先了解其基本使用,在其基础上再去理解底层原理可能会比较好点。
了解下gorm(背景知识)?
设计简洁、功能强大、自由扩展的全功能ORM
设计原则:AP!精简、测试优先、最小惊讶、灵活扩展、无依赖可信赖 功能完善:
- 关联:一对一、一对多、单表自关联、多态;Preload、Jois预加载、级联删除;关联模式;自定义关联表
- 事务:事务代码块、嵌套事务、Save Point
- 多数据库、读写分离、命名参数、Mp、子查询、分组条件、代码共享、SQL表达式(查询、创建、更新)、自动选字段、查询优化器
- 字段权限、软删除、批量数据处理、Prepared Stmt、.自定义类型、命名策略、虚拟字段、自动track时间、SQL Builder、Logger
- 代码生成、复合主键、Constraint、Prometheus、Auto Migration、真·跨数据库兼容.
- 多模式灵活自由扩展
- Developer Friendly
基础用法
1.下图左右两边实现的功能是一样的,都是连接数据库,将数据查询到users中
可以看出使用了gorm后,代码简洁变少了很多,这就是gorm框架的魅力,省去了写sql语句
(虽然不用写sql了,但是还是不能认为sql不重要了哦!!!)
2.操作数据库
- db.AutoMigrate(&Product{})和db.Migrator().CreateTable(&Product{})
- 表示使用Product这个结构体创建表结构
- db.Create(&users)和db.CreateBatches(users,100)
- 分别表示创建一条数据行和多条数据行
3.更新操作
值得注意的是当查不到数据的时候,会返回一个ErrRecordNotFound的错误
模型定义
下图中左右两边的模型定义是相等的,通过在user中组合gorm.model达到相同的效果
贯彻约定大于配置!!!
关联介绍
1.关联操作CRUD
2.关联操作-Preload/Joins预加载
3.关联操作一级联删除
详细的gorm使用可以参考官方文档:gorm.io/zh_CN/docs