gorm怎么整合进go-zero
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"gorm怎么整合进go-zero",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"gorm怎么整合进go-zero"吧!go-zero提供的
千家信息网最后更新 2025年01月20日gorm怎么整合进go-zero
本篇内容主要讲解"gorm怎么整合进go-zero",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"gorm怎么整合进go-zero"吧!
go-zero提供的代码生成器里面,没有提供orm框架操作,但是提供了遍历的缓存操作。但是gorm框架的话,没有比较好的缓存插件,虽然有一个gcache,但不支持gorm2.0版本。
所以我打算把这两个结合起来。在gorm官方文档中提到了一个接口,可以获取到生成的sql语句。
所以可以利用gorm当作一个sql语句的生成器,把生成后的sql语句放到go-zero生成的模板中去执行。
gorm中的sql生成器
stmt := DB.Session(&Session{DryRun: true}).First(&user, 1).Statementstmt.SQL.String() //=> SELECT * FROM `users` WHERE `id` = $1 ORDER BY `id`stmt.Vars //=> []interface{}{1}
整合到go-zero中的效果如下
调用GeneralSQL,使用gorm生成sql后,去执行
func (m *defaultJojUserModel) FindOne(id int64) (*JojUser, error) { jojUsercenterJojUserIdKey := fmt.Sprintf("%s%v", cacheJojUsercenterJojUserIdPrefix, id) var resp JojUser err := m.QueryRow(&resp, jojUsercenterJojUserIdKey, func(conn sqlx.SqlConn, v interface{}) error { query, values := m.GeneralSQL(func(tx *gorm.DB) *gorm.DB { return tx.First(&resp, id) }) return conn.QueryRow(v, query, values...) }) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err }}func (m *defaultJojUserModel) GeneralSQL(queryFn func(tx *gorm.DB) *gorm.DB) (string, []interface{}) { tx := queryFn(m.gormDB.Session(&gorm.Session{DryRun: true})) stmt := tx.Statement return stmt.SQL.String(), stmt.Vars}
关于效率的问题,做了一个简单的测试,使用gorm生成sql的话,生成1e5次耗时304.1878ms
type ArticleComment struct { Id int `json:"id"` Content string `json:"content"` ReplyComment *ArticleComment `json:"replyToComment"` // 该评论回复的评论 ParentCommentId int `json:"parentCommentId"` // 父评论Id ChildComment []ArticleComment `json:"childComment"` //以该评论未父节点的所有评论 CreateTime string `json:"createTime"` // 回复时间}func main() { begin := time.Now() for i := 0; i < 100000; i++ { GeneralSQL(func(tx *gorm.DB) *gorm.DB { return tx.Find(&Article{}, []int{1, 2}) }) } end := time.Now() fmt.Println(end.Sub(begin))func GeneralSQL(queryFn func(tx *gorm.DB) *gorm.DB) (string, []interface{}) { tx := queryFn(db.Session(&gorm.Session{DryRun: true})) stmt := tx.Statement return stmt.SQL.String(), stmt.Vars
到此,相信大家对"gorm怎么整合进go-zero"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
生成
评论
合进
生成器
语句
内容
框架
缓存
学习
实用
更深
两个
代码
兴趣
官方
实用性
实际
接口
插件
操作简单
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安全学院网络安全学习教程
区块鼠软件开发
软件开发工程师的招聘途径
软件开发做实业还是搞金融
管理系统软件开发工作流程
c语言连接服务器
服务器的数据库被攻击了怎么解决
软件开发传统模型
解决戴尔服务器噪音
研究生软件开发专业介绍
青浦区网络技术服务
网络安全法立法宗旨
老外软件开发 一个顶几十个
周村财务软件开发报价
服务器usb安装系统安装
软件开发与计算机专业考研
易助erp系统三个数据库
软件开发笔记软件
文化传媒网络技术研发简介
昆山网络安全机构
搞软件开发人的年薪
平阳现代化刀片服务器售后服务
全国高等教育学生数据库
交大数据库
软件开发 涉密资质证书
纪委网络安全检查
33岁入行网络安全工程师晚吗
朋友圈屏蔽数据库
育碧服务器爆炸视频
安卓远程连接服务器