go使用SQLX操作MySQL數(shù)據(jù)庫(kù)的教程詳解
前言
sqlx 是 Go 語(yǔ)言中一個(gè)流行的操作數(shù)據(jù)庫(kù)的第三方包,它提供了對(duì) Go 標(biāo)準(zhǔn)庫(kù) database/sql 的擴(kuò)展,簡(jiǎn)化了操作數(shù)據(jù)庫(kù)的步驟,并且擁有很大的數(shù)據(jù)庫(kù)交互方法,本文使用mysql
sqlx使用
1.下載sqlx包
使用以下命令下載sqlx
go get github.com/jmoiron/sqlx
2.引入驅(qū)動(dòng)
_ "github.com/go-sql-driver/mysql"
3.連接數(shù)據(jù)庫(kù)說(shuō)明
其連接數(shù)據(jù)庫(kù)使用
user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True
其中user為數(shù)據(jù)庫(kù)用戶,password為數(shù)據(jù)庫(kù)密碼
4.連接數(shù)據(jù)庫(kù)代操作
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("連接數(shù)據(jù)庫(kù)異常:", err) return } db = mysqlDb }
5.插入數(shù)據(jù)
創(chuàng)建數(shù)據(jù)庫(kù)表位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 utf8mb4 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;
插入數(shù)據(jù)代碼為:
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("連接數(shù)據(jù)庫(kù)異常:", 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("數(shù)據(jù)插入異常, ", err1) return } id, err2 := r.LastInsertId() if err2 != nil { fmt.Println("獲取id異常:, ", err2) return } fmt.Println("id為:", id) }
6.查詢數(shù)據(jù)
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("連接數(shù)據(jù)庫(kù)異常:", 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("查詢數(shù)據(jù)為:", user) }
之所以password使用類(lèi)型sql.NullString,是因?yàn)槿绻袨閚ull的話,會(huì)報(bào)錯(cuò),所以其會(huì)返回
遍歷false去判斷
7.更新數(shù)據(jù)
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("連接數(shù)據(jù)庫(kù)異常:", err) return } db = mysqlDb res, err := db.Exec("update user set user_name=? where id=?", "hello11", 1690290594064429065) if err != nil { fmt.Println("更新失敗:", err) return } row, err1 := res.RowsAffected() if err1 != nil { fmt.Println("獲取失敗, ", err1) return } fmt.Println("更新成功行數(shù):", row) }
8.刪除數(shù)據(jù)
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("連接數(shù)據(jù)庫(kù)異常:", 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("刪除行數(shù)為:", err) return } fmt.Println("刪除行數(shù)為: ", row) }
總結(jié)
go有很多優(yōu)秀的操作數(shù)據(jù)庫(kù)組件,都能提高開(kāi)發(fā)效率,至于在開(kāi)發(fā)中怎么選擇組件,看個(gè)人開(kāi)發(fā)效率和習(xí)慣
到此這篇關(guān)于go使用SQLX操作MySQL數(shù)據(jù)庫(kù)的教程詳解的文章就介紹到這了,更多相關(guān)go SQLX操作MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析
這篇文章主要為大家介紹了go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Go語(yǔ)言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法
這篇文章主要介紹了Go語(yǔ)言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法,涉及Go語(yǔ)言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02使用Go語(yǔ)言啟動(dòng)Redis的實(shí)例詳解
這篇文章主要為大家介紹了Go語(yǔ)言中一個(gè)可以用來(lái)啟動(dòng)?redis-server?的開(kāi)源庫(kù)?github.com/stvp/tempredis,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01Go json omitempty如何實(shí)現(xiàn)可選屬性
在Go語(yǔ)言中,使用`omitempty`可以幫助我們?cè)谶M(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過(guò)將字段類(lèi)型改為指針類(lèi)型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來(lái)實(shí)現(xiàn)這一功能,例如,將float32修改為*float322024-09-09詳解Go語(yǔ)言中如何創(chuàng)建Cron定時(shí)任務(wù)
Cron是一個(gè)強(qiáng)大的定時(shí)任務(wù)調(diào)度庫(kù),它允許開(kāi)發(fā)者在Go應(yīng)用中方便地設(shè)置和管理定時(shí)任務(wù),本文將結(jié)合具體案例,詳細(xì)介紹Cron在Go語(yǔ)言中的用法,需要的可以參考下2024-10-10