sqlx使用教程

sqlx使用教程sqlx 简介 sqlx 是 Go 的软件包 它在出色的内置 database sql 软件包的基础上提供了一组扩展 该库兼容 sql 原生包 同时又提供了更为强大的 优雅的查询 插入函数 新建表 DROP TABLE IF EXISTS people CREATE TABLE people

大家好,我是讯享网,很高兴认识大家。

sqlx简介

sqlx是 Go 的软件包,它在出色的内置database/sql软件包的基础上提供了一组扩展。该库兼容sql原生包,同时又提供了更为强大的、优雅的查询、插入函数。

新建表

DROP TABLE IF EXISTS `people`; CREATE TABLE `people` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; 

讯享网

连接数据库

  1. 下载依赖包
    讯享网go get "github.com/go-sql-driver/mysql" go get "github.com/jmoiron/sqlx" 
  2. 连接数据库
    import ( "fmt" "log" _ "github.com/go-sql-driver/mysql" //必须引入 否则报错:error sql: unknown driver "mysql" (forgotten import?) "github.com/jmoiron/sqlx" ) var db *sqlx.DB func init() { 
          // 根据自己的数据库配置替代字符串中对应字串 var err error db, err = sqlx.Connect("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True") if err != nil { 
          log.Fatalf("open mysql error %v", err) } fmt.Printf("连接成功:%v", db) db.SetMaxOpenConns(20) //设置最大连接数 db.SetMaxIdleConns(10) //设置最大空闲连接数 } 

插入数据

  1. 插入数据使用db.Exec方法
讯享网 r, err := db.Exec("insert into people(name, age)values(?, ?)", "bxy", 100) if err != nil { 
    fmt.Println("exec failed, ", err) return } id, err := r.LastInsertId() if err != nil { 
    fmt.Println("exec err, ", err) return } fmt.Println("insert succ: ", id) 

执行结果:
在这里插入图片描述
讯享网

查询数据

  1. 查询数据使用db.select方法和Get方法,第一个参数是接收结果的对象,第二个参数是sql语句,第三个参数及之后的参数是填充占位符的对象。
  2. Select返回所有满足条件的结果,需要使用对象列表接收。
  3. Get返回满足条件的第一条结果,需要使用对象接收。
type People struct { 
    Id int `db:"id"` Name string `db:"name"` Age int `db:"age"` } func main() { 
    var ( peopleList []People people = People{ 
   } ) err := db.Select(&peopleList, "select * from people where name = ?", "bxy")//查询全部记录 if err != nil { 
    fmt.Println("select failed ", err) return } fmt.Printf("select succ %#v\n", peopleList) err = db.Get(&people, "select * from people where name = ?", "bxy") //查询单条记录 if err != nil { 
    fmt.Println("Get failed ", err) return } fmt.Printf("get succ %#v\n", people) } 

执行结果:
在这里插入图片描述

修改数据

讯享网func main() { 
    res, err := db.Exec("update people set age=? where name=?", 28, "bxy") if err != nil { 
    fmt.Println("exec failed: ", err) return } row, err := res.RowsAffected() //返回修改成功的条数 if err != nil { 
    fmt.Println("row failed: ", err) return } fmt.Println("update succ: ", row) } 

执行结果:
在这里插入图片描述

删除数据

func main() { 
    res, err := db.Exec("delete from people where id=?", 1) if err != nil { 
    fmt.Println("exec failed: ", err) return } row, err := res.RowsAffected() //返回结果 if err != nil { 
    fmt.Println("row failed: ", err) return } fmt.Println("delete succ: ", row) } 

执行结果:
在这里插入图片描述

事务

  • db.Begin(): 开启事务
  • tx.rollback(): 回滚事务
  • tx.commit(): 提交事务
讯享网func main() { 
    conn, err := db.Begin() if err != nil { 
    fmt.Println("begin failed: ", err) return } r, err := conn.Exec("insert into people(name, age)values(?,?)", "如花", 20) if err != nil { 
    fmt.Println("exec failed: ", err) conn.Rollback() return } id, err := r.LastInsertId() if err != nil { 
    fmt.Println("lastinsertid err: ", err) conn.Rollback() return } fmt.Println("insert succ", id) r, err = conn.Exec("insert into people(name, age)values(?,?)", "如花", 20) if err != nil { 
    fmt.Println("exec failed: ", err) conn.Rollback() return } id, err = r.LastInsertId() if err != nil { 
    fmt.Println("lastinsertid err: ", err) conn.Rollback() return } fmt.Println("insert succ", id) conn.Commit() } 

执行结果:
在这里插入图片描述

小讯
上一篇 2025-03-27 09:08
下一篇 2025-04-09 10:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/40382.html