转载 sqlx库使用指南
sqlx介绍
在项目中我们通常可能会使用database/sql
连接MySQL数据库。sqlx
可以认为是Go语言内置database/sql
的超集,它在优秀的内置database/sql
基础上提供了一组扩展。这些扩展中除了大家常用来查询的Get(dest interface{}, ...) error
和Select(dest interface{}, ...) error
外还有很多其他强大的功能。
安装sqlx
go get github.com/jmoiron/sqlx
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
func initDB() (err error) {
dsn := "root:root@tcp(127.0.0.1:3306)/goMySqltest"
// 也可以使用MustConnect连接不成功就panic
// Connect = Open + Ping 检验同时尝试去Ping
db, err = sqlx.Connect("mysql", dsn)
if err != nil {
fmt.Printf("connect DB failed, err:%v\n", err)
return
}
// 设置sql线程池最大容量
db.SetMaxOpenConns(20)
// 设置sql最大空余容量
db.SetMaxIdleConns(10)
return
}
type user struct {
ID int
Name string
Age int
}
func main() {
err := initDB()
if err != nil {
fmt.Printf("initDB failed , err %s\n", err)
return
}
defer db.Close()
fmt.Printf("连接数据库成功!\n")
var u user
sqlStr1 := "select id , name , age from user where id = 1 "
db.Get(&u, sqlStr1)
fmt.Printf("ID:%d,name:%s,age:%d\n", u.ID, u.Name, u.Age)
var userlist []user
sqlStr2 := "select id , name , age from user"
db.Select(&userlist, sqlStr2)
fmt.Printf("%#v\n", userlist)
}
上课笔记
sqlx.Connect("mysql", dsn)
相当于Open + Ping
连接时检测格式并尝试连接- 单条查询是用
db.Get(&u, sqlStr1)
- 多行查询用
db.Select(&userlist, sqlStr2)
- 注意传入时必须用
&
,因为指针类型才能传入并修改其对应的值,所以结构体定义时还需要变成大写
type user struct {
ID int
Name string
Age int
}