sqlx的初体验

本文介绍了sqlx,一个增强的Go语言数据库工具,它提供了强大的查询构建器、结构体映射、NULL值安全处理、事务管理及多种数据库驱动支持。文章还讨论了sqlx在性能优化和原生SQL支持方面的特点,以及对比了与gorm的使用场景差异。
摘要由CSDN通过智能技术生成

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 main

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

var db *sqlx.DB

func initDB() (err error) {
	dsn := "user:password@tcp(127.0.0.1:3306)/sql_demo?charset=utf8mb4&params"
	// 也可以使用Mustconnect
	db, 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能力,所以最好能在平时开发中就练习;

SQLx是一个Rust编程语言的异步数据库操作库,可以用于编写高性能的数据库应用程序。它提供与多种数据库(如PostgreSQL、MySQL等)交互的功能,并支持异步操作。 SQLx使用Rust的异步特性来实现高并发、低延迟的数据库访问,同时提供了强大的类型安全性和简单易用的API。 在实际的后端应用中,SQLx可以用于对数据库进行查询和修改操作。它提供了一组简单而灵活的API,使得开发人员可以轻松地编写与数据库交互的代码。 SQLx支持使用SQL语言进行数据库查询和操作,同时也支持使用Rust的类型系统来进行数据验证,提高了代码的可靠性和安全性。 在使用SQLx时,需要先在Cargo.toml文件中添加SQLx的依赖,并指定所使用的数据库类型和连接信息。例如,使用PostgreSQL数据库的依赖配置如下: ```toml [dependencies] sqlx = { version = "0.5.5", features = ["postgres"] } ``` 接下来,可以使用SQLx提供的API来进行数据库操作。例如,下面是一个简单的查询示例: ```rust use sqlx::postgres::PgPool; #[derive(Debug, sqlx::FromRow)] struct User { id: i32, name: String, } #[async_std::main] async fn main() -> Result<(), sqlx::Error> { let pool = PgPool::connect("postgres://user:pass@localhost/mydb").await?; let users = sqlx::query_as::<_, User>("SELECT id, name FROM users") .fetch_all(&pool) .await?; println!("{:?}", users); Ok(()) } ``` 该示例中,首先定义了一个User结构体,并使用`#[derive(sqlx::FromRow)]`宏将其与数据库中的表映射。然后,创建了一个连接池,并使用`sqlx::query_as`方法执行一个查询,将查询结果映射到User结构体中。最后,输出查询结果。 总之,SQLx是一个非常强大的异步数据库操作库,可以帮助开发人员快速、安全地编写高性能的后端应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值