GORM V2 带来的知识盲区
GORM v2 是完全重写的,现已正式发布,带来了大量的改进以及新功能,我在翻译文档的过程中,遇到了一些以前没见过的新知识,在这里仅对相关概念做一下记录。
如果想要查看完整的内容,应该访问 release note 或者 发布说明
Hints
Optimizer Hints、Index Hints、Comment Hints,jinzhu 大佬的建议是不翻译,中文词不达意
这是提示
相关的功能,用于优化 SQL 等,需要了解 sql 执行过程帮助理解。
在 GORM 中的使用可以参考:https://gorm.io/docs/hints.html
Prepared Statement Mode
Prepared Statement Mode 应该是一个来自 JAVA 的概念,可以译作预编译模式
,作用是将生成的 SQL 缓存下来,提高后续的效率。
在 GORM 中的使用可以参考:https://gorm.io/docs/performance.html#Caches-Prepared-Statement
Preload 和 Joins Preload
v1 仅支持 Preload。
在进行预加载时,Preload
和 Joins Preload
作用类似,区别在于 Preload
会通过两条 SQL 完成查询,而 Joins Preload
通过一条 SQL 完成查询,至于用哪个就看自己的情况和习惯了。
此外,Joins Preload
还可以指定链接方式和字段等,更加灵活。
在 GORM 中的使用可以参考:https://gorm.io/docs/performance.html#Caches-Prepared-Statement
嵌套事务
相关概念有:Nested Transaction/SavePoint/RollbackTo SavePoint,即:嵌套事务、保存点、回滚至保存点
之前只知道事务和回滚,没想到还可以套娃,触及到知识盲区了
在 GORM 中的使用可以参考:https://gorm.io/docs/transactions.html
Group Conditions
分组条件,不算新内容,只是一个以前没注意到的示例,条件较多时可以参考
在 GORM 中的使用可以参考:https://gorm.io/docs/advanced_query.html#Group-Conditions
Batch Insert
批量插入,一个实用的功能
在 GORM 中的使用可以参考:https://gorm.io/docs/create.html#Batch-Insert
Upsert
update or insert
在数据冲突时(例如要 insert 的数据的存在主键或唯一索引冲突),如何处理,也是一个比较常见的问题。
在 GORM 中的使用可以参考:https://gorm.io/docs/create.html#Upsert-On-Conflict
DryRun
干运行模式,作用是:仅生成但不执行 SQL 语句,这在调试的时候很有用
在 GORM 中的使用可以参考:https://gorm.io/docs/gorm_config.html#DryRun
字段级权限控制
比较高级的用法,字段级别的权限控制,通过 tag 定义
在 GORM 中的使用可以参考:https://gorm.io/docs/models.html#Field-Level-Permission
全新的插件系统
一个非常亮眼的功能,为 GORM 生态打下了基础。
目前已有的插件包括:多数据库支持,读写分离支持,prometheus 集成
如何编写插件可以参考:https://gorm.io/docs/write_plugins.html
其它
此外,还有大量更新,查看 GORM Docs 和 GORM 2.0 Release Note 获取详情