GoZero 微服务个人探究之路(十一)编写sql语句所用到的sqlx包

前言

使用go-zero的脚手架工具goctl生成数据库代码时候,我们发现goctl引入了sqlx这个包来进行sql操作,本文旨在对sqlx包进行整理,来方便我们使用go-zero,sqlx进行sql操作

Why sqlx

为什么要额外引入sqlx包,增加复杂度,提高学习成本

1. sqlx在标准的database/sql包的基础上提供了更多的便捷功能,如结构体映射、更方便的查询参数处理等

2. sqlx允许开发者直接将数据库查询结果映射到Go的结构体中,这样可以避免手动扫描每个字段

3. sqlx兼容标准的database/sql包,这意味着开发者可以在不牺牲database/sql提供的任何功能的情况下,享受到sqlx带来的额外好处

4. sqlx支持上下文(context.Context)管理,可以方便地实现请求的超时控制、取消等功能

源代码

session接口

Session interface {Exec(query string, args ...any) (sql.Result, error)ExecCtx(ctx context.Context, query string, args ...any) (sql.Result, error)Prepare(query string) (StmtSession, error)PrepareCtx(ctx context.Context, query string) (StmtSession, error)QueryRow(v any, query string, args ...any) errorQueryRowCtx(ctx context.Context, v any, query string, args ...any) errorQueryRowPartial(v any, query string, args ...any) errorQueryRowPartialCtx(ctx context.Context, v any, query string, args ...any) errorQueryRows(v any, query string, args ...any) errorQueryRowsCtx(ctx context.Context, v any, query string, args ...any) errorQueryRowsPartial(v any, query string, args ...any) errorQueryRowsPartialCtx(ctx context.Context, v any, query string, args ...any) error}

Session接口中的函数提供了一系列数据库操作的方法

执行SQL命令

Exec(query string, args ...any) (sql.Result, error)

用于执行非查询SQL命令,如INSERT、UPDATE、DELETE等。适用于不需要返回结果集的操作。args参数用于SQL命令的参数化,以防止SQL注入攻击。

ExecCtx(ctx context.Context, query string, args ...any) (sql.Result, error)

类似于 Exec,但它允许传递一个 context.Context 对象,实现请求的超时、取消等上下文控制

准备SQL语句

Prepare(query string) (StmtSession, error):

用于预编译SQL语句以便多次执行。这可以提高性能并减少SQL注入的风险。返回的 StmtSession 可用于后续的执行或查询。

PrepareCtx(ctx context.Context, query string) (StmtSession, error):

类似于Prepare,但允许传递context.Context

查询单行数据

QueryRow(v any, query string, args ...any) error:

执行SQL查询并将单行结果直接映射到提供的变量中。适用于只期望返回单行数据的查询,如获取特定记录的详细信息。

QueryRowCtx(ctx context.Context, v any, query string, args ...any) error

类似于QueryRow,但包含上下文控制

QueryRowPartial(v any, query string, args ...any) error:

执行SQL查询并将结果部分映射到变量中,需要性能优化或只需要部分数据的情况下使用。

QueryRowPartialCtx(ctx context.Context, v any, query string, args ...any) error:

结合了部分查询和上下文管理

查询多行数据

QueryRows(v any, query string, args ...any) error:

执行SQL查询并将多行结果映射到提供的切片变量中。适用于需要返回多行数据的查询,如列出满足特定条件的所有记录。

QueryRowsCtx(ctx context.Context, v any, query string, args ...any) error:

类似于 `QueryRows`,但包含上下文控制

QueryRowsPartial(v any, query string, args ...any) error: 执行SQL查询并部分映射每行结果到切片中,用于只需要部分字段数据的场景。

QueryRowsPartialCtx(ctx context.Context, v any, query string, args ...any) error:

结合了部分多行查询和上下文管理

sqlconn接口

SqlConn interface {Session// RawDB is for other ORM to operate with, use it with caution.// Notice: don't close it.RawDB() (*sql.DB, error)Transact(fn func(Session) error) errorTransactCtx(ctx context.Context, fn func(context.Context, Session) error) error}

SqlConn 接口扩展了 Session 接口,并添加了一些专门用于处理数据库连接和事务的功能

RawDB() (*sql.DB, error):

返回原始的 *sql.DB 对象,使得开发者可以直接使用标准的 database/sql 包功能进行更底层或特定的数据库操作

Transact(fn func(Session) error) error:

用于执行一个数据库事务。它接受一个函数作为参数,这个函数包含了要在事务中执行的所有数据库操作

TransactCtx(ctx context.Context, fn func(context.Context, Session) error) error:

类似于 Transact 方法,但它允许传递一个 context.Context 对象

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣精选算法100道——【模板】前缀和 (二维)

目录 🎈题目解析 🎈算法原理 🎈实现代码 二维前缀和【模板】 🎈题目解析 上一题我们讲述了一维的前缀和求法。 第一行三个参数,n是行数3,m是列数4,q3代表查询次数 接下来就是n行m列的矩阵…

基于python混沌系统敏感文本信息加密算法的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Python】洛谷P7614 [COCI2011-2012#2] NAJBOLJIH 5

P7614 [COCI2011-2012#2] NAJBOLJIH 5 题目描述 给定 8 8 8 个数字 X 1 , X 2 , . . . , X 8 X_1,X_2,...,X_8 X1​,X2​,...,X8​,从中选出 5 5 5 个数字,使得这 5 5 5 个数字的总和最大。输出这 5 5 5 个数字的和以及它们的编号。 X i X_i Xi​…

微服务OAuth 2.1认证授权Demo方案(Spring Security 6)

文章目录 一、介绍二、auth微服务代码1. SecurityConfig2. UserDetailsService3. 总结 三、gateway微服务代码1. 统一处理CORS问题 四、content微服务代码1. controller2. SecurityConfig3. 解析JWT Utils4. 总结 五、一些坑 书接上文 微服务OAuth 2.1认证授权可行性方案(Sprin…

【51单片机】串口(江科大)

8.1串口通信 1.串口介绍 2.硬件电路 3.电平标准 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种: 电平标准是数据1和数据O的表达方式,是传输线缆中人为规定的电 压与数据的对应关系,串口常用的电平标准有如下…

【QT+QGIS跨平台编译】之三十六:【RasterLite2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、RasterLite2介绍二、文件下载三、文件分析四、pro文件五、编译实践一、RasterLite2介绍 RasterLite2是一个开源的轻量级栅格数据库,可以用于存储和管理各种类型的栅格数据,包括卫星遥感图像、数字高程模型等。 与传统的GIS数据存储方式不同,RasterLite2采用基…

React18原理: 时间分片技术选择

渲染1w个节点的不同方式 1 &#xff09;案例1&#xff1a;一次渲染1w个节点 <div idroot><div><script type"text/javascript">function randomHexColor() {return "#" ("0000" (Math.random() * 0x1000000 << 0).toS…

「计算机网络」物理层

物理层的基本概念 物理层的作用&#xff1a;尽可能屏蔽掉不同传输媒体和通信手段的差异物理层规程&#xff1a;用于物理层的协议主要任务&#xff1a;确定与传输媒体的接口有关的一些特性 机械特性电器特性功能特性过程特性 数据通信的基础知识 数据通信系统的模型 划分为…

【深蓝学院】移动机器人运动规划--第4章 动力学约束下的运动规划--作业

文章目录 1. T11.1 题目1.2 求解1.3 Pontryagin Minimum Principle 的拓展 2. T22.1 题目2.2 求解 3. Reference 1. T1 1.1 题目 1.2 求解 1.3 Pontryagin Minimum Principle 的拓展 2. T2 2.1 题目 2.2 求解 Listing1&#xff1a; demo_node.cpp/trajectoryLibrary() for(i…

蓝桥杯-X图形

问题描述 给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个 45度斜线方向引出的直线段组成&#xff0c;四条线段的长度相同&#xff0c;而且四条线段上的字母和中心点的字母相同。 一个 X 图形可以使用三个整数 r,c,L 来描述&#xff0c;其中 r,c 表示中心点位于第 r 行…

LOL全英文界面

文章目录 前言.bat 前言 对于需要学英文的同学们来说, 玩起lol来 ,有全部界面文字都是英文. 那真是很酷对于那些改配置还不起作用的玩家来说, 我只告诉你们, 只需要写一个.bat文件, 当然我的lol是日服版. 抗日起来是非常 cool .bat 只有两行 pushd "K:\Program Files (…

Spring Security 弃用 WebSecurityConfigurerAdapter 重写登录接口 前后端分离 返回json数据格式

springboot 版本高于 2.7 之后 弃用了 WebSecurityConfigurerAdapter 推荐使用组件化配置安全组件。 原版本的2.7版本的登录接口 功能&#xff1a; 通过/api/doLogin 进行登录 package cn.devops.config;import cn.devops.model.User; import cn.devops.response.RespBe…

nginx命名location跳转的模块上下文继承

目录 1. 缘起2. 解决方案2.1 保留指定模块的上下文信息2.2 获取指定模块的上下文信息2.3 设置指定模块的上下文信息2.4 设置模块上下文是否需要继承标记2.5 对openrety lua代码的支持 1. 缘起 nginx提供了非常棒的功能&#xff0c;命名location&#xff0c;如文章nginx的locati…

理解JAVA EE设计模式

理解JAVA EE设计模式 在Web应用程序的设计和开发阶段,开发人员在开发类似的项目时可能会遇到相似的问题。每名开发人员可能会遇到的问题找出不同或相似的解决方案。但是,这导致一些时间和精力浪费在为相似的问题寻找解决方案上。因此,要啊节省时间和精力,需要记录常见问题…

Vulnhub靶场 DC-9

目录 一、环境搭建 二、信息收集 1、主机发现 2、指纹识别 三、漏洞复现 1、dirsearch目录探测 2、sqlmap注入测试 3、文件包含漏洞 4、Knockd敲门服务 5、ssh爆破 ​​​​​​​6、提权 四、提取flag 一、环境搭建 Vulnhub靶机下载&#xff1a; 官网地址&#xff1a;https://…

红队打靶练习:Alfa:1

下载连接点击此处即可&#xff01; 目录 信息收集 1、arp 2、nmap 3、gobuster WEB web信息收集 FTP登录 smaba服务 crunch密码生成 提权 系统信息收集 权限提升 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, …

消息中间件面试篇

消息中间件 RabbitMQ 消息不丢失 可能导致消息丢失的情况&#xff1a; 生产者发送消息丢失消息队列宕机消费者服务宕机&#xff0c;未接收到消息 生产者确认机制 该机制解决了生产者发送消息有可能丢失的问题。 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程…

Unity下使用Sqlite

sqlite和access类似是文件形式的数据库&#xff0c;不需要安装任何服务&#xff0c;可以存储数据&#xff0c;使用起来还是挺方便的。 首先需要安装DLL 需要的DLL 我们找到下面两个文件放入Plugins目录 Mono.Data.Sqlite.dll System.Data.dll DLL文件位于Unity的安装目录下的…

「MySQL」事务

简介 定义&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败 基本操作 方式1 查看/设置事务提交方式 select…

LeetCode、1143. 最长公共子序列【中等,二维DP】

文章目录 前言LeetCode、1143. 最长公共子序列【中等&#xff0c;二维DP】题目链接与分类思路2022年暑假学习思路及题解二维DP解决 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者…