sqlx的初体验

sqlx的介绍和优点

sqlx 是一个用于 Go 语言的数据库工具,它在标准库的 database/sql 包的基础上提供了一些额外的功能,使得数据库操作更加方便和灵活。

优点:

  1. 查询构建器: sqlx 提供了更强大的查询构建器,使得在 Go 中执行复杂的 SQL 查询变得更加容易。它支持参数化查询、命名参数、以及更复杂的查询语句。
  2. 结构体映射: 通过 sqlx,查询的结果可以直接映射到结构体中。这意味着你可以定义一个结构体,其字段与数据库中的列相对应,sqlx 会自动将查询结果映射到这个结构体,省去了手动扫描和解析的步骤。
  3. Null 值处理: sqlx 对数据库中的 NULL 值进行了更好的处理。它使用 sql.Null* 类型来表示可能为 NULL 的字段,从而提供更安全和可靠的处理方式。
  4. 事务支持: sqlx 提供了更方便的事务管理。你可以通过 sqlx.Beginx 开启一个事务,然后使用该事务执行一系列的数据库操作,最后通过 CommitRollback 来提交或回滚事务。
  5. 数据库驱动支持: sqlx 不仅仅支持标准库的数据库驱动,还提供了对一些流行数据库的支持,例如 PostgreSQL、MySQL、SQLite 等。这使得你可以在不同的数据库之间切换而无需修改太多代码。
  6. 错误处理: sqlx 提供了更多的错误信息,以便更容易地调试和处理数据库操作中的问题。通过 NamedQueryNamedQueryRow 方法,你可以在查询中使用命名参数,并获得更有意义的错误信息。
  7. 性能优化: sqlx 的目标之一是提高执行数据库操作的性能。它通过一些优化和额外的功能,如预处理语句、批量插入等,提供了更好的性能。
  8. 支持原生 SQL: 虽然 sqlx 提供了方便的查询构建器,但你仍然可以使用原生的 SQL 语句,这使得你可以充分发挥 SQL 的强大功能。

sqlx的使用:

引入:

import ("fmt""github.com/jmoiron/sqlx"
)

基础连接示例:

package mainimport ("fmt""github.com/jmoiron/sqlx"
)var db *sqlx.DBfunc initDB() (err error) {dsn := "user:password@tcp(127.0.0.1:3306)/sql_demo?charset=utf8mb4&params"// 也可以使用Mustconnectdb, err = sqlx.Connect("mysql", dsn)if err != nil {fmt.Printf("Connect DB failed, err:%v\n", err)return}db.SetMaxOpenConns(20) //设置最大连接数;db.SetMaxIdleConns(10) //设置最大空闲连接数;return
}func main() {// 在 main 函数中调用初始化数据库的函数if err := initDB(); err != nil {fmt.Printf("init DB failed, err:%v\n", err)}fmt.Println("init DB success")// 其他业务逻辑代码
}

查询单条数据,方法名Get

image-20240121170731859

查询多条数据,方法名select

image-20240121180052342

image-20240121190702253

输出:image-20240121190736754

插入数据,关键字Exec

image-20240121190140073

更新数据,关键字Exec

image-20240121211008124

删除数据,关键字Exec

image-20240121211038011
至于为什么在前期写项目时不用gorm
1.gorm运行时虽然安全性更高,但消耗资源较多
2.gorm不利于初学者练习sql语句,在面试中很少会问gorm的相关知识,而是会考一些写sql能力,所以最好能在平时开发中就练习;

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

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

相关文章

Ubuntu添加AppImage到桌面及应用程序菜单

将AppImage添加到桌面,以PicGo为例 效果: 在桌面创建PicGo.desktop文件,输入以下内容: [Desktop Entry] EncodingUTF-8 TypeApplication #应用名称 NamePicGo #图标路径 Icon/usr/local/AppImage/icons/PicGo.png #启动是否开启…

通俗易懂理解FCN全卷积网络模型

温故而知新,可以为师矣! 一、参考资料 深度学习笔记(二十三)Semantic Segmentation(FCN/U-Net/PSPNet/SegNet/U-Net/ICNet/DFANet/Fast-SCNN) 二、FCN相关介绍 1. FCN简介 全卷积神经网络(Fully Convolutional Networks, 简称…

MySQL-删除重复数据

在实际应用中,遇到一个这样的问题,MySQL中存储的数据为资讯类数据,在页面展示时会出现多个平台的新闻报导相同的内容,导致页面会出现重复数据。因为数据是每天定期更新,所以最快捷有效的方式是在更新完数据后增加一个去…

$monitor和$strobe都看的是啥

注:本文来自硅芯思见 在编写测试平时,经常会用到$monitor和$strobe监测某些信号,并且使用格式上与$display比较类似,但是它们之间还是存在差异的,它们在当前仿真时间槽(time-slot)中被执行的区间…

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero 大家好 我是寸铁👊 总结了一篇Windows11安装go-zero代码生成工具goctl的文章✨ 喜欢的小伙伴可以点点关注 💝 goctl介绍 背景:goctl 的最早功能是为了解决 GRPC 内网…

leetcode:1768. 交替合并字符串(python3解法)

难度:简单 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1: 输入:w…

一些反序列化总结

1 反序列化漏洞原理 如果反序列化的内容就是那串字符串,是用户可以控制的(即变量的值),且后台不正当的使用了PHP中的魔法函数,就会导致反序列化漏洞,可以执行任意命令。Java 序列化指 Java 对象转换为字节序…

迷人的数据结构:揭秘数组和链表的不同

数据结构中的数组和链表的区别 一、简介二、数组的特点和特性三、链表的特点和特性四、数组和链表的对比五、数组和链表的代码实现六、总结 一、简介 数据结构是组织和存储数据的方式,直接影响着程序性能、内存利用和资源管理等关键方面。 数据结构提供了各种方法来…

如何使用react框架进行两个html页面的切换?

如何使用react框架进行两个html页面的切换? 项目背景首先是古老的做法login.htmlindex.html 正文->react框架如何设置两个页面的跳转?配置react框架的环境react框架如何实现两个页面的跳转? 项目背景 古老的html页面跳转的做法无法在react框架中直接适配,所以非常有必要…

代码随想录算法刷题训练营day16

代码随想录算法刷题训练营day16:LeetCode(104)二叉树的最大深度 、LeetCode(559)n叉树的最大深度、LeetCode(111)二叉树的最小深度、LeetCode(222)完全二叉树的节点个数 LeetCode(104)二叉树的最大深度 题目 代码 /*** Definition for a binary tree node.* publ…

NC开发客户端(前端)连接启动失败can‘t connect to server, please wait

效果图 解决方法 IP地址和端口要对应 1-IP地址中间启动,肯定是这个127.0.0.1 2-端口号,要对应中间件启动在控制台输出的端口 或者是在home目录-》bin-》sysConfig.bat这里面的服务器, 里面可以看到对应启动ip地址和端口

一天吃透面试八股文

内容摘自我的学习网站:topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创…