GO框架基础 (二)、sqlx库

这篇具有很好参考价值的文章主要介绍了GO框架基础 (二)、sqlx库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Go 语言中,sqlx 包是一个用于数据库操作的库,它建立在标准库的 database/sql 包之上,并提供了一些额外的功能,以简化和增强与数据库的交互。sqlx 的目标是通过提供更方便的 API 和一些附加功能来改善在 Go 中进行 SQL 数据库查询的体验。

以下是 sqlx 包的一些主要特性:

  1. 结构体映射: sqlx 允许将数据库查询的结果映射到 Go 结构体中,简化了数据的处理和访问。

  2. 命名参数: 支持使用命名参数执行查询,使得 SQL 语句更易读且更易维护。

  3. Null 值支持: 对于可能为 NULL 的字段,sqlx 提供了 null 类型,以方便地处理这些情况。

  4. 更丰富的查询方法: sqlx 提供了一些额外的查询方法,如 GetSelect,使得执行查询更加方便。

  5. 数据库连接池: 支持数据库连接池,提高了在并发环境中的性能。

  6. 支持多种数据库: sqlx 可以与多种数据库一起使用,包括 PostgreSQL、MySQL、SQLite 等。

  7. 原生 SQL 支持: sqlx 支持使用原生的 SQL 语句,同时也支持使用预处理语句。

  8. 扫描任意类型: sqlx 具有更灵活的 Scan 方法,可以直接将查询结果映射到任意类型。

总体而言,sqlx 提供了一些额外的工具和功能,使得在 Go 语言中进行数据库查询更加方便、灵活,同时也提高了代码的可读性和可维护性。如果你在 Go 中进行 SQL 数据库操作,sqlx 是一个值得考虑的库。

接下来我们已MySQL为例,通过go代码实现数据库的CRUD

1. 安装数据库相关包

 	go get "github.com/jmoiron/sqlx"
 	go get "github.com/go-sql-driver/mysql"

2.连接数据库

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

// 准备数据库的连接参数信息
var (
	userName  string = "root"
	passWord  string = "12345678"
	ipAddress string = "127.0.0.1"
	port      string = "3306"
	dbName    string = "go_test"
	charset   string = "utf8mb4"
)

// 链接mysql
func connectSql() *sqlx.DB {
	//root:12345678@tcp(127.0.0.1:3306)/go_test?charset=utf8mb4
	dbStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", userName,
		passWord,
		ipAddress,
		port,
		dbName,
		charset)
	//使用匿名变量忽略err
	DB, _ := sqlx.Open("mysql", dbStr)
	
	//数据库连接池优化
	//DB.SetConnMaxLifetime() 设置连接的最大生存时间为5分钟
	//DB.SetConnMaxIdleTime() 设置连接的最大空闲时间为10分钟
	
	// 设置连接池大小
	//db.SetMaxOpenConns(10) // 设置最大打开连接数
	//db.SetMaxIdleConns(5)  // 设置最大空闲连接数
	
	ping(DB)
	return DB
}

// 测试连接 调用DB对象的原始函数 ping()
func ping(db *sqlx.DB) {
	err := db.Ping()
	if err != nil {
		fmt.Println("ping失败", err)
	} else {
		fmt.Println("ping成功")
	}
}

func main() {
	mysqlDB := connectSql()
	defer mysqlDB.Close()
}

3.数据库连接成功后,使用sqlx相关语法实现对数据库的增删改查(CRUD)

先在本地创建一个测试用的数据库表文章来源地址https://www.toymoban.com/news/detail-831634.html

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `userid` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户密码',
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户头像',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
  • 使用Exec()实现数据的增删改
func main() {
	mysqlDB := connectSql()
	defer mysqlDB.Close()
	
	//新增
	insertSql := "insert into user(userid,username,password,avatar,create_time,update_time) values (?,?,?,?,?,?)"
	result, err := mysqlDB.Exec(insertSql, 1, "xiaoming", "12345678", "a.png", time.Now().Format("2006-01-02 15:04:05"), time.Now().Format("2006-01-02 15:04:05"))
	if err != nil {
		fmt.Println("数据插入失败", err)
		return
	}
	//查询新增后的最新的id
	id, _ := result.LastInsertId()
	fmt.Println(id)
	
	//修改
	updateSql := "update  user set username = 'hahaha' where id =1"
	result2, err2 := mysqlDB.Exec(updateSql)
	if err2 != nil {
		fmt.Println("数据更新失败", err2)
		return
	}
	num, _ := result2.RowsAffected()
	fmt.Println("影响的数据行数", num)

	//删除
	deleteSql := "delete from user where id =1"
	result3, _ := mysqlDB.Exec(deleteSql)

	num2, _ := result3.RowsAffected()
	fmt.Println("影响的数据行数", num2)
}
  • 使用Query、Get、Select实现数据的查询
	mysqlDB := connectSql()
	defer mysqlDB.Close()
	
	//基础类型存储
	querySql := "select * from user"
	rows, _ := mysqlDB.Query(querySql)
	for rows.Next() {
		var id, userId int
		var username, password, avatar, create_time, update_time string

		rows.Scan(&id, &userId, &username, &password, &avatar, &create_time, &update_time)

		fmt.Println(id, userId, username, password, avatar, create_time, update_time)
	}
	rows.Close()
	fmt.Println(rows)

	//利用结构体、切片存储数据
	//需要与数据库内的所有字段一一映射,不一致会导致查询后的解析失败
	type user struct {
		Id         int    `db:"id"`
		UserId     int    `db:"userid"`
		UserName   string `db:"username"`
		Password   string `db:"password"`
		Avatar     string `db:"avatar"`
		CreateTime string `db:"create_time"`
		UpdateTime string `db:"update_time"`
	}

	//查询单条
	userData := new(user)
	mysqlDB.Get(userData, "select * from user where id =2")
	fmt.Println(userData)

	//查询所有
	var userSlice []user
	//需要传入切片地址
	err := mysqlDB.Select(&userSlice, "select * from user")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(userSlice)

到了这里,关于GO框架基础 (二)、sqlx库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Golang】go编程语言适合哪些项目开发?

    前言 在当今数字化时代,软件开发已成为各行各业的核心需求之一。 而选择适合的编程语言对于项目的成功开发至关重要。 本文将重点探讨Go编程语言适合哪些项目开发,以帮助读者在选择合适的编程语言时做出明智的决策。 Go 编程语言适合哪些项目开发? Go是由Google开发

    2024年02月04日
    浏览(60)
  • 【Golang】VsCode下开发Go语言的环境配置(超详细图文详解)

    📓推荐网站(不断完善中):个人博客 📌个人主页:个人主页 👉相关专栏:CSDN专栏、个人专栏 🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚 ​ 话说在前,Go语言的编码方式是 UTF-8 ,理论上你直接使用文本进行编辑也是可以的,当然为了提升我们的开发效率我们还是需

    2024年02月07日
    浏览(70)
  • 适用于快速开发应用的Golang二次框架

    适用于快速开发应用的Golang二次框架。 GinSkeleton 项目简介 1.这是一个基于go语言gin框架的web项目骨架,专注于前后端分离的业务场景,其目的主要在于将web项目主线逻辑梳理清晰,最基础的东西封装完善,开发者更多关注属于自己的的业务即可。 2.本项目骨架封装了以tb_users表

    2024年02月07日
    浏览(34)
  • 100天精通Golang(基础入门篇)——第23天:错误处理的艺术: Go语言实战指南

    🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通

    2024年02月07日
    浏览(54)
  • 100天精通Golang(基础入门篇)——第5天: Go语言中的数据类型学习

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月08日
    浏览(36)
  • golang 通用的 grpc http 基础开发框架

    golang 通用的 grpc http 基础开发框架 仓库地址: https://github.com/webws/go-moda 仓库一直在更新,欢迎大家吐槽和指点 transport: 集成 http(echo、gin)和 grpc。 tracing: openTelemetry 实现微务链路追踪 pprof: 分析性能 config: 通用的配置文件读取模块,支持 toml、yaml 和 json 格式。 logger: 日志系统

    2024年02月10日
    浏览(27)
  • Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    使用gin框架的BindJSON方法,将前端的json格式数据将后端的结构体相绑定,从而获取到前端所发送的数据,并返回给前端 1.将前端发送过来的数据全部返回 2.将前端发送过来的json格式数据选择性返回   使用gin框架的PostForm方法,从而获取到前端form格式的参数 使用gin框架中的

    2024年02月01日
    浏览(36)
  • 【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

    **本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go语言入门指南:基础语法和常用特性解析 | 青训营 本文主要梳理自 第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲) 。同时

    2024年02月13日
    浏览(43)
  • Fisco Bcos区块链五(后端区块链应用开发框架及流程)

    在IntelliJ IDE中创建一个gradle项目,勾选Gradle和Java,并输入工程名 asset-app 。 注意:该项目的源码可以用以下方法获得并参考。(此步骤为非必须步骤) 注解 如果因为网络问题导致长时间无法下载,请尝试将 199.232.28.133 raw.githubusercontent.com 追加到 /etc/hosts 中,或者请尝试 cu

    2024年02月14日
    浏览(45)
  • 【Go 基础篇】Go语言字符类型:解析字符的本质与应用

    字符类型是计算机编程中用于表示文本和字符的数据类型,是构建字符串的基本单位。在Go语言(Golang)中,字符类型具有独特的特点和表示方式,包括Unicode编码、字符字面值以及字符操作。本篇博客将深入探讨Go语言中的字符类型,介绍字符的编码方式、字符字面值的表示

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包