go使用SQLX操作MySQL數(shù)據(jù)庫的教程詳解
前言
sqlx 是 Go 語言中一個流行的操作數(shù)據(jù)庫的第三方包,它提供了對 Go 標(biāo)準(zhǔn)庫 database/sql 的擴(kuò)展,簡化了操作數(shù)據(jù)庫的步驟,并且擁有很大的數(shù)據(jù)庫交互方法,本文使用mysql
sqlx使用
1.下載sqlx包
使用以下命令下載sqlx
go get github.com/jmoiron/sqlx
2.引入驅(qū)動
_ "github.com/go-sql-driver/mysql"
3.連接數(shù)據(jù)庫說明
其連接數(shù)據(jù)庫使用
user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True
其中user為數(shù)據(jù)庫用戶,password為數(shù)據(jù)庫密碼
4.連接數(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ù)庫異常:", err)
return
}
db = mysqlDb
}5.插入數(shù)據(jù)
創(chuàng)建數(shù)據(jù)庫表位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ù)庫異常:", 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ù)庫異常:", 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使用類型sql.NullString,是因?yàn)槿绻袨閚ull的話,會報錯,所以其會返回

遍歷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ù)庫異常:", 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ù)庫異常:", 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ù)庫組件,都能提高開發(fā)效率,至于在開發(fā)中怎么選擇組件,看個人開發(fā)效率和習(xí)慣
到此這篇關(guān)于go使用SQLX操作MySQL數(shù)據(jù)庫的教程詳解的文章就介紹到這了,更多相關(guān)go SQLX操作MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例
本文主要介紹了golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Go并發(fā)編程中的錯誤恢復(fù)機(jī)制與代碼持續(xù)執(zhí)行實(shí)例探索
這篇文章主要為大家介紹了Go并發(fā)編程中的錯誤恢復(fù)機(jī)制與代碼持續(xù)執(zhí)行實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
golang jwt+token驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了golang jwt+token驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Go和RabbitMQ構(gòu)建高效的消息隊列系統(tǒng)
本文主要介紹了使用Go語言和RabbitMQ搭建一個簡單的消息隊列系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
詳解go-zero如何使用validator進(jìn)行參數(shù)校驗(yàn)
這篇文章主要介紹了如何使用validator庫做參數(shù)校驗(yàn)的一些十分實(shí)用的使用技巧,包括翻譯校驗(yàn)錯誤提示信息、自定義提示信息的字段名稱、自定義校驗(yàn)方法等,感興趣的可以了解下2024-01-01
golang 實(shí)現(xiàn)時間戳和時間的轉(zhuǎn)化
這篇文章主要介紹了golang 實(shí)現(xiàn)時間戳和時間的轉(zhuǎn)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?dir
本文主要為大家介紹了執(zhí)行g(shù)o build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解
這篇文章主要為大家介紹了Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

