Gorm 高级查询

Gorm 高级查询,第1张

越高级,越复杂的查询,也同时意味着高耗,但是平时有一些数据少,但是业务复杂的场景,可以使用下。 这里主要说明的是 go 中使用 gorm 进务查询。

有时候代码是可需要映射到一个 map 结构, 不需要映射到一个 结构体中,可以写成如下:

在涉及并发的场景,往往需要加锁互斥,和 Java 类似, Go 中也有加行锁的方式,加 for update 即可。

一般写法如下:

示例代码:

有时候,我们需要进行简单的数据统计, 比如查询到结果有多少行,

有时候也需要分组统计行数

有时候我们会使用到数据统计的功能, 比如根据数据库字段 batch_no 进行分组,然后统计总金额,总笔数。

分组查询统计一般的写法如下:

代码示例:

一般来说,很少使用关联查询,但是如果要使用关联查询,可以如下:

Scopes 允许你指定常用的查询,可以在调用方法时引用这些查询, 也就是说,可以在查询中使用函数。

举个例子:

在这里插入图片描述

本文主要研究一下gorm的Unscoped

gorm.io/gorm@v1.20.11/chainable_api.go

gorm.io/gorm@v1.20.11/callbacks/delete.go

gorm.io/gorm@v1.20.11/soft_delete.go

gorm的Unscoped方法设置tx.Statement.Unscoped为true;针对软删除会追加SoftDeleteDeleteClause,即设置deleted_at为指定的时间戳;而callbacks的Delete方法在db.Statement.Unscoped为false的时候才追加db.Statement.Schema.DeleteClauses,而Unscoped则执行的是物理删除。

本文主要研究一下gorm的logger

gorm.io/gorm@v1.20.10/logger/logger.go

gorm.io/gorm@v1.20.10/logger/logger.go

gorm.io/gorm@v1.20.10/gorm.go

gorm.io/gorm@v1.20.10/callbacks.go

输出

gorm的logger提供了Interface接口,可以自己实现并全局设置或者在session级别设置;gorm默认的logger实现了logger.Interface接口定义的LogMode、Info、Warn、Error、Trace方法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7761872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存