sqlx的介绍和优点
sqlx
是一个用于 Go 语言的数据库工具,它在标准库的 database/sql
包的基础上提供了一些额外的功能,使得数据库操作更加方便和灵活。
优点:
- 查询构建器:
sqlx
提供了更强大的查询构建器,使得在 Go 中执行复杂的 SQL 查询变得更加容易。它支持参数化查询、命名参数、以及更复杂的查询语句。 - 结构体映射: 通过
sqlx
,查询的结果可以直接映射到结构体中。这意味着你可以定义一个结构体,其字段与数据库中的列相对应,sqlx
会自动将查询结果映射到这个结构体,省去了手动扫描和解析的步骤。 - Null 值处理:
sqlx
对数据库中的 NULL 值进行了更好的处理。它使用sql.Null*
类型来表示可能为 NULL 的字段,从而提供更安全和可靠的处理方式。 - 事务支持:
sqlx
提供了更方便的事务管理。你可以通过sqlx.Beginx
开启一个事务,然后使用该事务执行一系列的数据库操作,最后通过Commit
或Rollback
来提交或回滚事务。 - 数据库驱动支持:
sqlx
不仅仅支持标准库的数据库驱动,还提供了对一些流行数据库的支持,例如 PostgreSQL、MySQL、SQLite 等。这使得你可以在不同的数据库之间切换而无需修改太多代码。 - 错误处理:
sqlx
提供了更多的错误信息,以便更容易地调试和处理数据库操作中的问题。通过NamedQuery
和NamedQueryRow
方法,你可以在查询中使用命名参数,并获得更有意义的错误信息。 - 性能优化:
sqlx
的目标之一是提高执行数据库操作的性能。它通过一些优化和额外的功能,如预处理语句、批量插入等,提供了更好的性能。 - 支持原生 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¶ms"
// 也可以使用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
查询多条数据,方法名select
输出:
插入数据,关键字Exec
更新数据,关键字Exec
删除数据,关键字Exec
至于为什么在前期写项目时不用gorm
1.gorm运行时虽然安全性更高,但消耗资源较多
2.gorm不利于初学者练习sql语句,在面试中很少会问gorm的相关知识,而是会考一些写sql能力,所以最好能在平时开发中就练习;