我的编程空间,编程开发者的网络收藏夹
学习永远不晚

gorm怎么整合进go-zero

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 JojUsererr := 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, nilcase sqlc.ErrNotFound:return nil, ErrNotFounddefault: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.Statementreturn 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"` // 父评论IdChildComment    []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.Statementreturn stmt.SQL.String(), stmt.Vars

到此,相信大家对“gorm怎么整合进go-zero”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

gorm怎么整合进go-zero

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

gorm怎么整合进go-zero

本篇内容主要讲解“gorm怎么整合进go-zero”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gorm怎么整合进go-zero”吧!go-zero提供的代码生成器里面,没有提供orm框架操作,
2023-06-29

SpringBoot中怎么对Shiro进行整合

本篇内容介绍了“SpringBoot中怎么对Shiro进行整合”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原生的整合创建项目创建一个 Sp
2023-06-08

怎么对struts、spring与hibernate进行整合

怎么对struts、spring与hibernate进行整合?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。准备三个框架结合的lib包Spring3结合Struts2的步骤如下:
2023-05-31

使用spring怎么对mybatis进行整合

本篇文章为大家展示了使用spring怎么对mybatis进行整合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 数据库连接配置信息jdbc.properties#mysql version dat
2023-05-31

使用SpringMVC怎么对Swagger进行整合

这篇文章将为大家详细讲解有关使用SpringMVC怎么对Swagger进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。配置1、引入相关jar包:
2023-05-31

SpringBoot怎么进行整合Druid数据源

今天小编给大家分享一下SpringBoot怎么进行整合Druid数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.自定
2023-07-02

使用Spring boot怎么对Mybatis进行整合

这篇文章将为大家详细讲解有关使用Spring boot怎么对Mybatis进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、文件结构DataBaseConfiguration.Jav
2023-05-31

Python怎么对多个sheet表进行整合

这篇文章主要介绍“Python怎么对多个sheet表进行整合”,在日常操作中,相信很多人在Python怎么对多个sheet表进行整合问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么对多个shee
2023-06-30

Spark怎么进行数据交互和整合

Spark可以通过多种方式进行数据交互和整合,以下是一些常用的方法:使用Spark的DataFrame API:Spark DataFrame提供了一种方便的方式来处理结构化数据,可以使用DataFrame API来读取、写入和整合数据。通
Spark怎么进行数据交互和整合
2024-03-14

Go怎么整合captcha实现验证码功能

这篇“Go怎么整合captcha实现验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go怎么整合captcha实现验
2023-07-05

go语言gorm怎么实现mysql存储图片

在Go语言中使用GORM实现MySQL存储图片可以通过以下步骤实现:定义一个结构体来表示图片信息,包括图片的名称、路径、大小等信息。type Image struct {ID uintName stringPath stringSize
go语言gorm怎么实现mysql存储图片
2024-04-09

使用Spring怎么对Web项目进行整合

今天就跟大家聊聊有关使用Spring怎么对Web项目进行整合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一 概述1.整合目的将所有对象的创建与管理任务交给Spring容器,降低程序
2023-05-31

Go框架三件套Gorm、Kitex、Hertz怎么使用

本篇内容介绍了“Go框架三件套Gorm、Kitex、Hertz怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!三件套介绍Gorm、Ki
2023-07-05

go zero微服务高在请求量下怎么优化

本文小编为大家详细介绍“go zero微服务高在请求量下怎么优化”,内容详细,步骤清晰,细节处理妥当,希望这篇“go zero微服务高在请求量下怎么优化”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。本地缓存当我们
2023-07-02

整合SSM时怎么对Log4j日志进行配置

本篇文章为大家展示了整合SSM时怎么对Log4j日志进行配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。配置 log4j.properties在SSM整合的项目中会有文件夹src/main/res
2023-05-31

SpringBoot怎么整合Pulsar

这篇文章主要介绍了SpringBoot怎么整合Pulsar的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么整合Pulsar文章都会有所收获,下面我们一起来看看吧。一、添加pom.xml依赖
2023-07-02

Springboot怎么整合https

本篇内容介绍了“Springboot怎么整合https”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 简介HTTP是不安全的,我们需要给它
2023-06-08

SpringBoot怎么整合Mybatis

这篇文章主要介绍了SpringBoot怎么整合Mybatis的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么整合Mybatis文章都会有所收获,下面我们一起来看看吧。Mybatis的简单介
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录