这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
01、理解database/sql
import driver 实现 使用 driver + DSN 初始化 D B 连接
db, err := sql.Open("mysql", "user:password#tcp(127.0.0.1:3306)/hello")
复制代码
复制代码
执行一条 SQL , 通过 rows 取回返回的数据 处理完毕 , 需要释放链接
rows, err := db.Query("select id, name from users where id = ?", 1)
if err != nil{
// xxx
}
defer rows.Close()
复制代码
复制代码
Exec / ExecContext . > Result
Query / QueryContext . > Rows (COIumns)
QueryRow / QueryRowContext - > ROW (Rows 简化 )
02、GORM 使用简介
“ 设计简洁 、 功能强大 、 自由扩展的全功能 ORM ”
设计原则 : API 精简 、 测试优先 、 最小惊讶 、 灵活扩展 、 无依赖
功能完善 :
- 关联 : 一对一 、 一对多 、 单表自关联 、 多态 ; PreIoad 、 Joins 颅加载 、 绒联删 ; 关目关模式 ; 自定义关联表
- 事务 : 事务代码块 、 嵌事务 、 Save Point
- 多数数库 、 读写分离 、 命名参数 、 Map 、 子询 、 分组条件 、 代码共享 、 SQL 表达式 ( 查询 、 创建 、 更新 ) 、 自动选字段 、 洵优化器
- 字段权限 、 软删除 、 批虽数据处理 、 Prepared 自定义类型 、 命名略 、 虚拟字段 、 自动 track 时间 、 SQL Builder 、 Logger
- 代码生成 、 复合主腱 、 Constraint 、 Prometheus 、 Auto Migration 、 百 . 数据库兼容一
模式灵活自由扩展
基本用法
基本用法
/ / 操作数据库
, Autc*igrate(&Product{})
, “ O , ( r “ teT 1 & Pro ( t { } )
/ / https://gorm.io/docs/migration.html
/ / 版本管理 - https ://github.com/go-gormigrate/gomigrate
/ / 创建
user : = Use r{Name : "Jinzhu" , Age: 18 , Bi rthday : time , - ) }
result : “ db.Create(&user) / / pass poi nte r Of data tO Create
user , ID
resu1t.Error
/ / 返回主键 last i nse rt id
/ / 返回 error
result , RowsAffected / / 返回影响的行数
/ / 批量创建
var users = OUser{{Nme• "jinzhul"} , {Name
db . Create(&users)
CreateIr8atches(users , 1 )
for - , user : = {
user. ID / / 1 , 2 , 3
"jinzhu2") , {Name :
"jinzhu3"}}
复制代码
复制代码
模型定义
管理约定
关联介绍
关联操作
约定优于配置
- 表名为 struct name 的 snake_cases 复数格式
- 字段名为 field name 的 snake—case 单数格式
- 旧 / ld 字段为主譴 , 如果为数字 , 则为自增主键
- CreatedAt 字段 , 创建时 , 保存当前时间
- UpdatedAt 字段 , 创建 、 更新时 , 保存当前时间
- gorm.DeletedAt 字段 , 默认开启 soft delete 模式
作者:JiangH156
链接:juejin.cn/post/719018…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
GORM 设计原理
3插件是怎么工作的 多租户
多数据库 、 读写分离
加解巒 、 混沌工程 “
GORM 最佳实践
批量数据撾怍
代码复用 、 分表
Trace
Migrator
Gen 代码牛成 / Raw SOL