这是我参与「第五届青训营 」伴学笔记创作活动的第16天
Database/sql 及 GORM
这节课主要介绍了 Database/sql 的基础概念、设计原理与基本用法切入,通过一些实例讲解,引入有关GORM 相关解读的相关解读。
理解 Database/sql
基本用法
数据库可以通过 import driver 实现,即使用 driver + DSN 初始化 DB 连接。
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello")
执行sql使用 db.Query("sql语句内容",1) 句式来执行,返回一个rows和err,通过rows取回返回的数据后处理完毕,需要释放连接调用defer rows.Close()。
对数据用for循环进行数据处理, rows.Next(),错误为err,调用Scan(%user.ID, &user.Name),随后调用append添加user到users。
设计原理
应用程序通过操作接口(上层应用)对 database/sql (连接池)操作,database 对连接接口、操作接口 (数据库Driver) 来对数据库操作。
DB 连接的几种类型有 直接连接 / Conn、预编译/ Stmt、 事务/ Tx。
Exec/ExecContext -> Result、Query/QueryContext -> Rows (Columns) QueryRow / QueryRowContext -> Row (Rows 简化)。
GORM
基本用法
GORM是具有设计简洁、功能强大、自由扩展的全功能 ORM。GORM的设计原则: API 精简、测试优先、最小惊讶、灵活扩展、无依赖、可信赖。
具有特性:
关联:一对一、一对多、单表自关联、多态;
Preload 、Joins 预加载、级联删除;关联模式;
自定义关联表;事务:事务代码块、嵌套事务、Save Point;
多数据库、读写分离、命名参数、 Map 、子查询、分组条件、代码共享、SQL 表达式(查询、创建、更新) 、自动选字段、查询优化器;字段权限、软删除、批量数据处理、 Prepared Stmt 、自定义类型、命名策略、虚拟字段、自动 track 时间、 SQL Builder 、 Logger;
代码生成、复合主键、 Constraint 、 Prometheus 、 Auto Migration 、跨数据库兼容;
多模式灵活自由扩展;
开发式友好。
模型定义
GORM的模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成。可导出的字段在使用 GORM 进行 CRUD 时拥有全部的权限,此外,GORM 允许您用标签控制字段级别的权限。这样您就可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略