gorm怎么整合进go-zero
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"gorm怎么整合进go-zero",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"gorm怎么整合进go-zero"吧!go-zero提供的
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
互联网科技公司起名
科技互联网项目
互联网科技的
互联网科技公司电话
未来的互联网科技
丰台科技园 互联网
奔汉互联网科技
友谊互联网络科技
上海万想互联网科技
科技大学互联网专业好不好
互联网公司会议桌创意科技软装饰
重庆威客帮互联网科技
重庆互联网医院沙龙医盟信息科技
宜昌元轩互联网科技有限公司
互联网新科技动漫ppt素材
广东工业互联网大赛深圳学泰科技
郑州欣桑互联网科技有限公司
互联网科技包装股
福仕德教育科技互联网
广东猫王互联网科技有限公司电话
以房互联网科技
互联网科技汛
深圳互联网科技怎么样
富国互联网科技创新基金
承德科技产业互联网发展
岳阳华臻互联网科技有限公司
如何创新互联网科技
图游互联网科技
吉林省码上互联网科技电话
米泉互联网科技专业怎么样