GORM与database/sql入门学习 | 青训营笔记

180 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的5篇笔记

本节课是由gorm框架作者金柱,给大家讲解了gorm底层实现原理,对于新手来说比较不好理解,我们可以先了解其如何使用,再在此基础上深入理解其底层和设计原理。

一、database\sql

基本用法

  1. import导入连接数据库的驱动,此处使用的是mysql的驱动

第4行前面的 _ 表示导入这个依赖,但不使用,使用它的init函数初始化连接

image.png

2.连接上数据库服务器

image.png

3.查询数据保存到rows中

image.png

4.错误处理,并将rows中的数据扫描到[]user切片中

image.png

image.png

底层设计原理

简单来说,就说应用程序通过database\sql这个驱动接口,对我们的数据库服务器进行操作

database\sql接口定义了一套统一的实现接口,开发人员只需要按照统一的规则去实现这个接口,就可以操作到任何的数据库服务器,让开发人员能够更专注的进行业务处理

image.png

image.png

底层操作过程伪实现

image.png

底层连接接口

image.png

image.png

image.png

image.png

DB连接的几种类型和处理数据返回的几种方式

image.png

image.png

二、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不重要了哦!!!)

image.png

2.操作数据库

  • db.AutoMigrate(&Product{})和db.Migrator().CreateTable(&Product{})
    • 表示使用Product这个结构体创建表结构
  • db.Create(&users)和db.CreateBatches(users,100)
    • 分别表示创建一条数据行和多条数据行

image.png

3.更新操作

值得注意的是当查不到数据的时候,会返回一个ErrRecordNotFound的错误

image.png

模型定义

下图中左右两边的模型定义是相等的,通过在user中组合gorm.model达到相同的效果

image.png 贯彻约定大于配置!!!

image.png

关联介绍

image.png

1.关联操作CRUD

image.png

2.关联操作-Preload/Joins预加载

image.png

3.关联操作一级联删除

image.png

详细的gorm使用可以参考官方文档:gorm.io/zh_CN/docs