开发者

go使用SQLX操作MySQL数据库的教程详解

目录
  • 前言
  • sqlx使用
    • 1.下载sqlx包
    • 2.引入驱动
    • 3.连接数据库说明
    • 4.连接数据库代操作
    • 5.插入数据
    • 6.查询数据
    • 7.更新数据
    • 8.删除数据
  • 总结

    前言

    sqlx 是 Go 语言中一个流行的操作数据库的第三方包,它提供了对 Go 标准库 database/sql 的扩展,简化了操作数据库的步骤,并且拥有很大的数据库交互方法,本文使用mysql

    sqlx使用

    1.下载sqlx包

    使用以下命令下载sqlx

     go get github.com/jmoiron/sqlx
    

    2.引入驱动

    _ "github.com/go-sql-driver/mysql"
    

    3.连接数据库说明

    其连接数据库使用

    user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True
    

    其中user为数据库用户,password为数据库密码

    4.连接数据库代操作

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/jmoiron/sqlx"
    )
    
    
    var db *sqlx.DB
    
    func main() {
    
    	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
    	if err != nil {
    		fmt.Println("连接数据库异常:", err)
    		return
    	}
    	db = mysqlDb
    }

    5.插入数据

    创建数据库表位student

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for user
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user`  (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `password` varchar(255) CHARACTER SET utjavascriptf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `sex` int(11) NULL DEFAULT NULL,
      `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 1690290594064429066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    SET FOREIGN_KEY_CHECKS = 1;

    插入数据代码为:

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/jmoiron/sqlx"
    )
    
    var db *sqlx.DB
    
    func main() {
    
    	mysqlDb, e编程客栈rr := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
    	if err != nil {
    		fmt.Println("连接数据库异常:", err)
    		return
    	}
    	db = mysqlDb
    	r, err1 := db.Exec("insert into user(mobile, password, sex, user_name)values(?, ?, ?, ?)", "aaa", "123456", 1, "aaa")
    	if err1 != nil {
    		fmt.Println("数据插入异常, ", err1)
    		return
    	}
    	id, err2 := r.LastInsertId()
    	if err2 != nil {
    		fmt.Println("获取id异常:, ", err2)
    		return
    	}
    
    	fmt.Println("id为:", id)
    }

    6.查询数据

    package main
    
    import (
    	"database/sql"
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/jmoiron/sqlx"
    )
    
    type User struct {
    	Id       int64          `db:"id"`
    	Name     string         `db:"user_name"`
    	Sex      int            `db:"sex"`
    	Mobile   string         `db:"mobile"`
    	Password sql.NullString `db:"password"`
    }
    
    var db *sqlx.DB
    
    func main() {
    
    	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
    	if err != nil {
    		fmt.Println("连接数据库异常:", err)
    		return
    	}
    	db = mysqlDb
    	var user []User
    	err1 := db.Select(&user, "select id, user_name, sex, mobile, password from user where id=?", 1690290594064429065)
    	if err1 != nil {
    		fmt.Println("查询异常, ", err1)
    		return
    	}
    
    	fmt.Println("查询数据为:", user)
    }

    之所以password使用类型sql.NullString,是因为如果列为null的话,会报错,所以其会返回

    go使用SQLX操作MySQL数据库的教程详解

    遍历false去判断

    7.更新数据

    package main
    
    import (
    	"database/sql"
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/jmoiron/sqlx"
    )
    
    type User struct {
    	Id       int64          `db:"id"`
    	Name     string         `db:"user_name"`
    	Sex      int            `db:"sex"`
    	Mobile   string         `db:"mobile"`
    	Password sql.NullString `db:"password"`
    }
    
    var db *sqlx.DB
    
    func main() {
    
    	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
    	if err 编程!= nil {
    		fmt.Println("连接数据库异常:", err)
    		return
    	}
    	db = mysqlDb
    	res, err := db.Exec("update user set user_name=? where id=?", "hello11", 1690290594064429065)
    	if err != nil {
    		fmt.Printl编程n("更新失败:", err)
    		return
    	}
    	row, err1 := res.RowsAffected()
    	if err1 != nil {
    		fmt.Println("获取失败, ", err1)
    		return
    	}
    	fmt.Println("更新成功行数:", row)
    }

    8.删除数据

    package main
    
    import (
    	"database/sql"
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/jmoiron/sqlx"
    )
    
    type User struct {
    	Id       int64          `db:"id"`
    	Name     string         `db:"user_name"`
    	Sex      int            `db:"sex"`
    	Mobile   string         `db:"mobile"`
    	Password sql.NullString `db:"password"`
    }
    
    var db *sqlx.DB
    
    func main() {
    
    	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
    	if err != nil {
    		fmt.Println("连接数据库异常:", err)
    		return
    	}
    	db = mysqlDb
    	res, err := db.Exec("delete from user where id=?", 1690290594064429065)
    	if err != nil {
    		fmt.Println("删除失败, ", err)
    		return
    	}
    
    	row, err := res.RowsAffected()
    	if err != nil {
    		fmt.Println("删除行数为:", err)
    		return
    	}
    
    	fmt.Println("删除行数为: ", row)
    }

    总结

    go有很多优秀的操作数据库组件,都能提高开发效率,至于在开发中怎么选择组件,看个人开发效率和习惯

    到此这篇关于go使用SQLX操作MySQL数据库的教程详解的文章就介绍到这了,更多相关go SQLX操作MySQL内容请搜索编程客栈(www.devze.com)以前的文章或继续浏编程客栈览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜